冒泡排序
冒泡排序原理:
从左往右,依次比较相邻两个元素的大小,如果第一个元素大于第二个元素,就进行交换位置,第一轮比较结束就会将最大的元素放到最后;
再进行除了最后一个元素之外的元素的比较,确定第二大的元素,放到倒数第二的位置上;
继续上述比较,直到只剩最后一个元素需要比较为止;
示例说明:
对于数组[36,76,44,21,66,18]来说,
第一轮:
36<76,不用交换位置;
76<44,交换位置,数组变为[36,44,76,21,66,18];
76>21,交换位置,数组变为[36,44,21,76,66,18];
76>66,交换位置,数组变为[36,44,21,66,76,18];
76>18,交换位置,数组变为[36,44,21,66,18,76];
可见最大的元素已经确定,而且不用再参加比较,数组变为[36,44,21,66,18,76].
第二轮:
36<44,不用交换位置;
44>21,交换位置,数组变为[36,21,44,66,18,76];
44<66,不用交换位置;
66>18,交换位置,数组变为[36,21,44,18,66,76];
可见除了第一轮最大的元素之外的最大元素也确定了位置,数组变成[36,21,44,18,66,76],
第三轮:
36>21,交换位置,数组变为[21,36,44,18,66,76];
36<44,不用交换位置;
44>18,交换位置,数组变为[21,36,18,44,66,76];
第三大的元素确定了位置,数组变成[21,36,18,44,66,76].
第四轮:
25<36,不用交换位置;
36>18,交换位置,数组变成[25,18,36,44,66,76];
第四大的元素确定了位置,数组变成[25,18,36,44,66,76].
第五轮:
25>18,交换位置,数组变成[18,25,36,44,66,76];
这时就剩下了最后一个元素25没确定位置,而且不需要再比较,那么排序后的数组就为[18,25,36,44,66,76].
总结:
从示例中可以看出,6个元素之间只需要(元素数-1)轮的比较,每一轮中的比较次数为(元素数-轮数)
Java代码实现:
package com.yg.study; public class BubbleSort { public static void main(String[] args) { int[] arr= {36,76,44,21,66,18}; doSort(arr); System.out.println("=============排序结果展示==============="); //可以去掉 for (int i : arr) { System.out.print(i+"\t"); } } private static void doSort(int[] arr) { for(int i=0;i<arr.length-1;i++) { //-1是确定要比较的轮数 System.out.println("************第"+(i+1)+"轮比较************"); //用于区分每一轮比较结果,可以去掉 for (int j = 0; j < arr.length-1-i; j++) { //-1是为了防止数组下标越界,-i是用于排除最后一个元素参与比较 if(arr[j]>arr[j+1]) { //如果前一个元素大于后一个元素,进行位置交换 int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } for (int k : arr) { //用于打印每一次比较的结果,可以去掉 System.out.print(k+"\t"); } System.out.println(); //用于区分每一次比较的结果,可以去掉 } } } }
结果展示: