一、选择排序
选择排序算法的执行过程是这样的:首先,算法遍历整个列表以确定最小的元素,接着,这个最小的元素被置换到列表的开头,确保它被放置在其应有的有序位置上。接下来,从列表的第二个元素开始,算法再次执行扫描,这次是为了找出剩余的 n-1 个元素中的最小值,并将其与第二个位置的元素进行交换,这样第二小的元素就被安置在了正确的位置上。依此类推,当进行到第 i 次扫描时(其中 i 的取值范围是从 0 到 n-2),算法会在剩下的 n-i 个元素中寻找最小值,并将其与第 i 个位置的元素进行交换。经过 n-1 次这样的操作后,列表便完成了排序,每个元素都被安置在了其最终的有序位置上。
SelectionSort(A[0..n-1]):
# 该算法用选择排序对给定的数组排序
# 输入: 一个可排序数组A[0..n-1]
# 输出: 升序排列的数组A[0..n-1]
for i ← 0 to n-2 do
min ← i
for j ← i+1 to n-1 do
if A[j] < A[min] then
min ← j
swap A[i] and A[min]
二、冒泡排序
冒泡排序是一种简单的排序算法,它通过重复遍历待排序的列表,比较每对相邻元素的值,如果一对元素的顺序错误(即,第一个比第二个大),就交换它们的位置。通过这种方式,每次遍历都会将未排序部分的最大元素“冒泡”到它的正确位置(即列表的末尾)。经过第一轮排序后,最大的元素会被放置在列表的最末端。紧接着,算法会再次从头开始遍历列表,这次遍历将会把第二大的元素移动到正确的位置。这个过程会一直重复,每次遍历少比较一次,直到整个列表变得有序。具体来说,当执行第i次冒泡排序时(其中i的范围是0到n-2),可以通过下面的示意图来表示这个过程,确保每次遍历都会减少未排序元素的数量,直至整个列表被完全排序。
BubbleSort(A[0..n-1]):
# 该算法使用冒泡排序方法对数组A[0..n-1]进行排序
# 输入: 一个可排序的数组A[0..n-1]
# 输出: 非降序排列的数组A[0..n-1]
for i from 0 to n-2 do
for j from 0 to n-2-i do
if A[j+1] < A[j] then
swap A[j] and A[j+1]
参考文献
[1] 算法设计与分析基础/(美)莱维汀(Levitin, A.)著;潘彦译.一3版. --北京:清华大学出版社,2015 .