冒泡排序
冒泡排序的核心思路,就是每一轮都把最大的数"冒"到数组顶部.
1 算法过程
(从小到大排序)
1. 每一轮排序,都从第一个数开始,比较相邻的数;
2. 如果第一个数比第二个数大,则交换两个数的位置;
3. 如果第一个数不大于第二个数,则不交换位置,开始比较第二个数和第三个数;
4. 以此类推,直到比完最后两个数,选出数列最大值置于末尾;
5. 待排数列更新为原数列减去末尾值,开始下一轮排序,重复上面的步骤;
2 排序演示
对下面的数列进行冒泡排序:
3, 4, 1, 5, 2
第一轮排序开始,从第一个数3
开始,比较相邻的数4
3, 4, 1, 5, 2
↑ ↑
3
不大于4
,不交换位置,开始比较第二个数4
和第三个数1
3, 4, 1, 5, 2
↑ ↑
4
大于1
,交换位置,开始比较第三个数4
和第四个数5
3, 1, 4, 5, 2
↑ ↑
4
不大于5
,不交换位置,开始比较第四个数5
和最后一个数2
3, 1, 4, 5, 2
↑ ↑
5
大于2
,交换位置,此时5
已到达数列末尾,第一轮排序结束,排序结果为:
3, 1, 4, 2, 5
第二轮排序开始,待排数列为
3, 1, 4, 2
(5已经确认为上一轮排序数列的最大值,不参与第二轮排序)
从第一个数3
开始,比较相邻的数1
3, 1, 4, 2
↑ ↑
3
大于1
,交换位置,比较第二个数3
和第三个数4
1, 3, 4, 2
↑ ↑
3
不大于4
,不交换位置,比较第三个数4
和最后一个数2
1, 3, 4, 2
↑ ↑
4
大于2
,交换位置,此时4
已到达数列末尾,第二轮排序结束,排序结果为
1, 3, 2, 4
第三轮排序开始,待排数列为
1, 3, 2
从第一个数1
开始,比较相邻的数3
1, 3, 2
↑ ↑
1
不大于3
,不交换位置,比较第二个数3
和最后一个数2
3
大于2
,交换位置,此时3
已到达数列末尾,第三轮排序结束,排序结果为
1, 2, 3
第四轮排序开始,待排数列为
1,2
从第一个数1
开始,比较最后一个数2
1, 2
↑ ↑
1
不大于2
,不交换位置,此时2
已是数列末尾,第四轮排序结束,排序结果为
1, 2
第五轮排序,待排数列只剩一个数1
,排序结束,得到有序数组
1, 2, 3, 4,