冒泡排序
冒泡排序及详解:
import java.util.Arrays; /** * Created by Administrator on 2022/8/2. */ public class MaoPaoPaiXu { public static void main(String[] args) { int[] arr = {8,3,49,1,30,22,11}; // 数组长度为n for(int i=0;i<arr.length-1;i++){ // 外层n-1次:比如7个元素,只需要其中6个元素都确定了顺序,剩下一个也就是确定了的。 for(int j=0;j<arr.length-1-i;j++){ // 内层交换次数:n-1-i。因为每确定一个元素,确定的元素就不参与了。每次内层循环完就会确定一个元素,减1。确定的元素是放在末尾。 if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } System.out.println(Arrays.toString(arr)); } /* 算法,思路很重要。 做题思路: 1.发现规律,相邻元素交换,最后总能确定一个最大的元素在末尾。 假如前面的大于后面的就交换: 8 3比较交换3 8,8 49比较交换8 49,49 1比较交换1 49,49 30比较交换30 49,49 22比较交换22 49,49 11比较交换11 49。最终确定末位为49。 结果:3 8 1 30 22 11 49. 根据这个规律写一段代码: for(int j=0;j<arr.length-1;j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } 2.这只能确定一个,我需要确定6次才能完成最终的排序。对应(arr.length-1),并且确定的不需要再参与比较了。 于是想着需要在外面加一层循环 for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1;j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } 3.已经确定的不需要再参与比较了。 每次外层循环都需要减掉末位一个。 第一次外层循环1:arr.length-1-0 2:arr.length-1-1 =arr.length-1-1 3:arr.length-1-1-1=arr.length-1-2 对应arr.length-1-i. 最终代码: for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } */ }