什么是冒泡排序
冒泡排序过程图示
冒泡排序的大致流程:
依次比较相邻的两个数,正序则不动,倒序则交换位置,如此循环,直到整个数组为有序为止
以下列数据为例:
第一轮比较
首先比较索引为0和1的值
3>2,为倒序
则进行位置交换
↓↓↓↓↓↓↓
再比较索引为1和2的值
3<7,为正序
位置不变
↓↓↓↓↓↓↓
再比较索引为2和3的值
7>4,为倒序
则进行位置交换
↓↓↓↓↓↓↓
再比较索引为3和4的值
7>1,为倒序
则进行位置交换
↓↓↓↓↓↓↓
此时已经遍历到最后一位(length-1),第一轮位置交换结束
第一轮总结:
href=””>1. 由于是依次比较并交换数值,当前数组中最大的值已经被放到最后的位置
2.那么接下来的排序则不需要遍历到最后一位,因为最大的1个值已经被排到了最后
第二轮比较
数组中的最大值已经被放到了最后,那么第二轮比较则可以无视最后一位,比较前面的数值(length-1-1)即可
重复第一轮的操作
首先比较索引为0和1的值
2<3,为正序
位置不变
↓↓↓↓↓↓↓
再比较索引为1和2的值
3<4,为正序
位置不变
↓↓↓↓↓↓↓
再比较索引为2和3的值
4>1,为倒序
则进行位置交换
↓↓↓↓↓↓↓
此时已经遍历”7”之前的数(leng-1-1),第二轮结束
第二轮总结:
1.由于不考虑已经排序好的7,第二轮已经将除最后一位之前(leng-1-1)的数组中最大值交换到了最后位置
2.那么接下来的排序则不需要遍历到最后2位,因为最大的2个值已经被排到了最后
第三轮比较
数组中的最大值两个值已经被放到了最后,那么第三轮比较则可以无视最后两位,比较前面的数值(leng-1-2)即可
重复第一轮的操作
首先比较索引为0和1的值
2<3,为正序
位置不变
↓↓↓↓↓↓↓
再比较索引为1和2的值
3>1,为倒序
则进行位置交换
↓↓↓↓↓↓↓
此时已经遍历”4”和”7”之前的数(leng-1-2),第二轮结束
第三轮总结:
1.由于不考虑已经排序好的4和7,第三轮已经将除最后两位之前(leng-1-2)的数组中最大值交换到了最后位置
2.那么接下来的排序则不需要遍历到最后3位,因为最大的3个值已经被排到了最后
第四轮比较
数组中的最大值三个值已经被放到了最后,那么第四轮比较则可以无视最后三位,比较前面的数值(leng-1-3)即可
重复第一轮的操作
首先比较索引为0和1的值
2>1,为倒序
则进行位置交换
↓↓↓↓↓↓↓
此时已经遍历”3”和”4”和”7”之前的数(leng-1-3),最后一轮结束
第四轮(最后一轮)总结:
1.由于不考虑已经排序好的3和4和7,第四轮已经将除最后三位之前(leng-1-3)的数组中最大值交换到了最后位置。
2.此时遍历完毕,数组已经为有序数组。