选择排序法
前言
选择排序法(Selection Sort)也算是枚举法的应用,就是反复从末排序的数列中取出最小的元素,加入另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从小到大排序,则将最大值放入第一个位置;若是从大到小排序,则将最大值放入最后一个位置,例如,一开始在所有的数据中挑选一个最小项放在第一个位置(假设是从小到大排序),在从第二项开始挑选一个最小项放在第2个位置,以此重复,直到完成排序为止。
一、选择排序的过程
使用数列(57,20,97,82,6)来演示排序的过程。
原始数据排列如下图所示:
1、首先找到需要排序的数列中的最小值,并且与数列的第一个元素进行交换。
2、从第二个元素开始找,找到不包含第一个元素的剩下数列的最小值,在与数列的第二个元素交换。
3、从第三个元素开始找,找到不包含第一个、第二个元素的剩下数列的最小值,在与数列的第三个元素交换。
4、从第四个元素开始找,找到不包含第一个、第二个、第三个元素的剩下数列的最小值,在与数列的第四个元素交换。
5、依次循环,直到完成排序。
二、代码实现
1.python实现
代码如下(示例):
def selection_sort(arr):
for i in range(len(arr) - 1):
min_index = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
print('\n第%d次排序结果为:'%(i+1),end='')
showdata(arr)
return arr
#打印数据
def showdata(data):
for i in range(len(data)):
print('%3d'%data[i],end='')
data=[16,25,39,27,12,8,45,63]
print('原始数据为:')
showdata(data)
result = selection_sort(data)
print('\n排序后的数据为:')
print(result)
2.结果
上述的代码运行后的结果,如下图所示:
参考书本:
吴灿铭,胡昭民,《图解算法使用Python》第2版,清华大学出版社。