冒泡排序
冒泡排序的核心算法:
- 获取第i个元素和相邻的元素比较,如果array[i]>array[i+1],那就交换,直到第n-i个位置
- i=i+1,重复执行上一个步骤
为什么第一步是执行到n-i个位置,因为循环i次,就会将数组中大的i元素挪到最后面。执行第一次的时候,就会将数组中最大的元素挪到数组尾部,执行第二次,就会将数组中第二大元素挪到倒数第二个位置,以此类推。
Java实现:
import java.util.Arrays;
public class BubbleOrder {
/***
* 每次取出一个元素和数组里面的其他元素比较,
* 第N次比较,只需要比较前nums.length-N元素就好了
* 因为后面N个元素已经是有序的了
*
* **/
public int[] order(int[] nums) {
System.out.println("original:"+Arrays.toString(nums));
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length-i;j++){
if(j+1<nums.length-i){
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
System.out.println("i:"+i+" "+Arrays.toString(nums));
}
}
}
}
System.out.println("sorted:"+Arrays.toString(nums));
return nums;
}
public static void main(String[] args) {
BubbleOrder bubbleOrder=new BubbleOrder();
System.out.println(Arrays.toString(bubbleOrder.order(new int[]{7,4,6,5,1,2,3,9})));
}
}
输出过程:
original:[7, 4, 6, 5, 1, 2, 3, 9] //原数组
i:0 [4, 7, 6, 5, 1, 2, 3, 9]
i:0 [4, 6, 7, 5, 1, 2, 3, 9]
i:0 [4, 6, 5, 7, 1, 2, 3, 9]
i:0 [4, 6, 5, 1, 7, 2, 3, 9]
i:0 [4, 6, 5, 1, 2, 7, 3, 9]
i:0 [4, 6, 5, 1, 2, 3, 7, 9] //第1轮执行结束,把7放到了倒数第二
i:1 [4, 5, 6, 1, 2, 3, 7, 9]
i:1 [4, 5, 1, 6, 2, 3, 7, 9]
i:1 [4, 5, 1, 2, 6, 3, 7, 9]
i:1 [4, 5, 1, 2, 3, 6, 7, 9] //第2轮执行结束,把6放到了倒数第三
i:2 [4, 1, 5, 2, 3, 6, 7, 9]
i:2 [4, 1, 2, 5, 3, 6, 7, 9]
i:2 [4, 1, 2, 3, 5, 6, 7, 9] //第3轮执行结束,把5放到了倒数第三
i:3 [1, 4, 2, 3, 5, 6, 7, 9]
i:3 [1, 2, 4, 3, 5, 6, 7, 9]
i:3 [1, 2, 3, 4, 5, 6, 7, 9] //第4轮执行结束,把4放到了倒数第四
sorted:[1, 2, 3, 4, 5, 6, 7, 9] //排序结束