冒泡排序的原理及java代码实现
概述
冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的开始。
简单点说,就是:
冒泡排序是將比較大的數字沉在数组的后面(可以理解为下面),较小的浮在前面(上面)。
直观释义图:
步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实例
原始数据:
35262
第一轮
比较3和5,5大于3,不需交换 35262 继续比较5和2,5大于2,交换位置 32562 继续比较5和6,6大于5,不需交换 32562 继续比较6和2,6大于2,交换位置 32526 6下沉到最后,两个2都分别向上(前)冒出。
第二轮
比较3和2,3大于2,交换位置 23526 比较3和5,5大于3,不需交换 23526 比较5和2,5大于2,交换位置 23256 不需比较5和6
第三轮
比较2和3,3大于2,不需交换 23256 比较3和2,3大于2,交换位置 22356 不需比较了
第四轮
比较2和2,不需交换 22356
四轮结束
22356
代码实现(Java)
packagecom.coder4j.main.arithmetic.sorting; publicclassBubble{ /** *冒泡排序 * *@paramarray *@return */ publicstaticint[]sort(int[]array){ inttemp; //第一层循环表明比较的轮数,比如length个元素,比较轮数为length-1次(不需和自己比) for(inti=0;i<array.length-1;i++){ System.out.println("第"+(i+1)+"轮开始"); //第二层循环,每相邻的两个比较一次,次数随着轮数的增加不断减少,每轮确定一个最大的,不需比较那个最大的 for(intj=0;j<array.length-1-i;j++){ if(array[j+1]<array[j]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } System.out.println("第"+(i+1)+"轮,第"+(j+1)+"次比较:"); for(intk:array){ System.out.print(k+""); } System.out.println(); } System.out.println("结果:"); for(intk:array){ System.out.print(k+""); } System.out.println(); } returnarray; } publicstaticvoidmain(String[]args){ int[]array={3,5,2,6,2}; int[]sorted=sort(array); System.out.println("最终结果"); for(inti:sorted){ System.out.print(i+""); } } }
测试输出结果:
第1轮开始 第1轮,第1次比较: 35262 第1轮,第2次比较: 32562 第1轮,第3次比较: 32562 第1轮,第4次比较: 32526 结果: 32526 第2轮开始 第2轮,第1次比较: 23526 第2轮,第2次比较: 23526 第2轮,第3次比较: 23256 结果: 23256 第3轮开始 第3轮,第1次比较: 23256 第3轮,第2次比较: 22356 结果: 22356 第4轮开始 第4轮,第1次比较: 22356 结果: 22356 最终结果 22356
经测试,与实例中结果一致。