冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。
我用一个例子,带你看下冒泡排序的整个过程。我们要对一组数据 4,5,6,3,2,1,从小到大进行排序。第一次冒泡操作的详细过程就是这样:
可以看出,经过一次冒泡操作之后,6 这个元素已经存储在正确的位置上。要想完成所有数据的排序,我们只要进行 6 次这样的冒泡操作就行了。
实际上,刚讲的冒泡过程还可以优化。当某次冒泡操作已经没有数据交换时,说明已经达到完全有序,不用再继续执行后续的冒泡操作。我这里还有另外一个例子,这里面给 6 个元素排序,只需要 4 次冒泡操作就可以了。
冒泡排序算法的原理比较容易理解,具体的代码我贴到下面,你可以结合着代码来看我前面讲的原理。
public class Test { public static void main(String[] args) { int [] a = {5,3,6,2,7,8,1,9}; bubbleSort(a,8); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } public static void bubbleSort(int[] a,int n){ if(n <=1) return; for (int i = 0; i < n; i++) { //提交退出冒泡排序的标志位; boolean flag = false; for (int j = 0; j < n-i-1; j++) { //比较,交换 if(a[j] > a[j+1]){ int tmp = a[j]; a[j]=a[j+1]; a[j+1]=tmp; //表示数据有交换 flag = true; } } if(!flag){ //没有数据交换,提前退出 break; } } } }
执行结果:
标签:int,冒泡排序,冒泡,操作,排序,public From: https://www.cnblogs.com/kdx-2/p/17001256.html