一、冒泡排序原理(从小到大)
对待排序的数组从前往后遍历,遍历过程中如果发现两个数据大小顺序不符时,对两个数据进行交换,这时较大的数据就会往后移动(如图所示)
注意:排序过程中每一轮都会将最大的数移动到最后面,所以每次遍历比较的次数都会比上一轮少一次
二、示例
有下列一组数据[3,2,1,4] ,接下来我们用冒泡的方法对其进行排序
第一轮:
从数组的第一个数据3的位置开始遍历,发现3的下一个数据比3小,那么需要把3和2的位置进行交换
然后从3的位置开始,3和4遵从升序,无需交换
此时遍历到4,4的下一个数据 比4小,把4和1的位置进行交换
至此第一轮排序完成,数组为[2,3,14],此时数组中最大的数据4排在了最后
第二轮:
因为上一轮中最大数据4已经排在了最后,所以第二轮不用遍历到4,遍历数据2,3,1即可
从2的位置开始,2和3遵从升序,无需交换
遍历到3,3的下一个数据比3小,把3和1的位置进行交换
第二轮完成,3被排在了第二次遍历的最后位置
第三轮
在前两轮的遍历中,3和4已经有序的排在了最后,所以此次遍历仅需遍历2和1
2的下一个数据比2小,把2和1的位置进行交换
第三轮遍历完成,冒泡排序结束
三、代码演示
public static void main(String[] args) {
int[] arr = new int[]{1,0,2,4,3,5,7,6};
maopao(arr);
System.out.println(Arrays.toString(arr));
}
public static void maopao(int[] arr){
for (int i = 0; i < arr.length; i++){
for (int j = 0; j < arr.length - i - 1; j++){
if (arr[j] > arr[j+1]){
//进行位置交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}