vlambda博客
学习文章列表

冒泡排序快速学习(例子+图文分析)

冒泡排序

1、举个例子





现有数组 X{7,6,3,5,4,1,2,9,8},
要将数组X里面的数按照从小到大进行排序





2、java实现





//进行冒泡排序

for(int i=0;i<X.length;i++) {

    for(int j=0;j<(X.length-1-i);j++) {

        if(X[j]>X[j+1]) {

        //交换两个相邻位置的数值

            int num=X[j];

            X[j]=X[j+1];

            X[j+1]=num;

        }

    }

}

//时间复杂度为O(n^2)





3、效果展示





未排序:7 6 3 5 4 1 2 9 8 

当 i= 0时:6 3 5 4 1 2 7 8 9

当 i= 1时:3 5 4 1 2 6 7 8 9

当 i= 2时:3 4 1 2 5 6 7 8 9

当 i= 3时:3 1 2 4 5 6 7 8 9

当 i= 4时:1 2 3 4 5 6 7 8 9

当 i= 5时:1 2 3 4 5 6 7 8 9

当 i= 6时:1 2 3 4 5 6 7 8 9

当 i= 7时:1 2 3 4 5 6 7 8 9

当 i= 8时:1 2 3 4 5 6 7 8 9

排序后:1 2 3 4 5 6 7 8 9 





4、图文分析

4-1



当i=0,j=0时

比较第0(j)个位置和第1(j+1)个位置上面的数

可以看出第0个比第1个大,所以交换位置



4-2:



当i=0,j=1时

冒泡排序快速学习(例子+图文分析)

比较第1(j)个位置和第2(j+1)个位置上面的数,

可以看出第1个比第2个大,所以交换位置



4-3:



后面以此类推,当i=0,j=X.lenth-1时

效果如下:

冒泡排序快速学习(例子+图文分析)

此时可以发现,已经把最大的数移到数组末尾了



4-4:



当i=1,2,4…时,也是如此

可以看出一个细节:

每次j发生一次迭代完成,都会把当前 最大值移至数组的末尾
每次j发生循环时,只需要让 j 等于(X.length-1-i)的位置就可以结束当前循环



我知道你在看呦