以 3,2,1,5,4 为例
一、冒泡排序
框住的两个数就是被比较的两个数,小数要在左边,大数要到右边去。
1. 第一轮,选出最大值
(1)【 3,2】,1,5,4
因为 3 > 2,所以 2 移动到 3 的左边
(2)2,【 3,1】,5,4
因为 3 > 1, 所以 1 移动到 3 的左边
(3)2,1,【 3,5】,4
因为 3 < 5,所以不需要移动
(4)2,1,3,【 5,4】
因为 5 > 4, 所以 4 移动到 5 的左边
至此,第一轮比较已经结束,总共进行了4次比较。我们可以看到,现在的排序状态是 [2,1,3,4,5
]。最大值 5 已经被成功地“运输”到了最右边,因此,我们只需要比较前面的四个数,找出第二个最大值,并将其“运输”到倒数第二个位置。
2. 第二轮
红色的数字代表已经被固定
(1)【2,1】,3,4,5
因为 2 > 1,所以 1 移动到 2 的左边。
(2)1,【2,3】,4,5
不变。
(3)1,2,【3,4】,5
不变。
至此,第二轮比较结束,总共进行了 3 次比较。我们可以看到,现在的排序状态是 [1,2,3,4
,5
]。4 在这个时候已经处于 倒数第二个位置。其实我们肉眼看上去已经排序完毕了,但是计算机是不会察觉的,它只知道,此时倒数第二个数一定是第二大的,因此我们的冒泡排序还是要继续进行。
3. 第三轮
(1)【1,2】,3,4
,5
不变。
(2)1,【2,3】,4
,5
不变。
至此,第三轮比较结束,总共进行了 2 次比较。我们可以看到,现在的排序状态是 [1,2,3
,4
,5
]。倒数第三个数成为第三大数值。
3. 第四轮
(1)【1,2】,3
,4
,5
不变。
至此,第四轮比较结束,总共进行了 1 次比较。此时数列的状态是 [1,2
,3
,4
,5
] ,除了第一个数外的其它数值都固定住了,显然第一个数就是最小的那个数了。因此,我们的冒泡排序就到此结束了。
待补充