冒泡排序快速学习(例子+图文分析)
冒泡排序
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)的位置就可以结束当前循环
我知道你在看呦