冒泡排序的基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
借用嘻哈算法这本书中的一张图
如果有n 个数进行排序,只需将n-1 个数归位,也就是说要进行n-1 趟操作。而“每一趟”都需要从第1 位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数,已经归位的数则无需再进行比较。
java程序代码如下:
public class PaiXu { public static void main(String[] args) {
PaiXu px = new PaiXu();
int[] score = {5,3,5,2,8,0,7,10,4};
/* * 20170205冒泡排序 */ int[] bubbleSortResult = px. bubbleSort(score); for(int i=0;i<score.length;i++){ System.out.print(bubbleSortResult[i]+" "); } } /* * 冒泡排序 * @param score 分数(0-10分) * @return 返回计数数组 * 说明:有n个数,相邻两个数比较,如果前面的数比后面的数小就交换位置,假设把一个最小的数放在最后面归位为一趟,需要比较1~n-1趟,设趟数为i,每趟比较次数为1~n-i次 */ public int[] bubbleSort(int[] score){ int a=0; int n=score.length; for(int i=1;i<=n-1;i++){ for(int j=1;j<=n-i;j++){ if(score[j-1]<score[j]){ a=score[j-1]; score[j-1]=score[j]; score[j]=a; } } } return score; } }
代码执行结果为:
10 8 7 5 5 4 3 2 0