选择排序法也算法枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入到另一个数列中,最后的结果即为已经排好序的数列,选择排序法可使用两种方式排序,一种为在所有的数据中,从小到大排序,将最大值放入第一个位置,另一个是从小到大排序,将最大值放入最后一个位置,例如,一开始在所有的数据中挑选一个最小项放在第一位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第二个位置,以此重复,直到完成排序为止。

下面我们仍然用 55,23,87,62,16数列从小到大的排序过程来说明选择排序法的验算流程,原始数据如图
图解算法系列(十三):选择排序法_数据
1 首先找到次数列中最小值后与数列中的第一个元素交换,
图解算法系列(十三):选择排序法_其他_02
2 从第二个值开始找,找到此数列中(不包含第一个)的最小值,再和第二个值交换,如图
图解算法系列(十三):选择排序法_其他_03
3 从第三个值开始找,找到此数列中(不包含第一个,第二个)的最小值,再和第三个值交换,
图解算法系列(十三):选择排序法_图解算法系列(十三):选择排序法_04
4 从第四个值开始找,找到数列中(不含第三,第二,第一)的最小值,再和第四个值交换,排序完成。

图解算法系列(十三):选择排序法_最小值_05

def showdata(data):
	for i in range(8):
		print("%3d" % data[i], end="")
	print()

def select(data):
	for i in range(7):
		for j in range(i+1,8):
			if data[i]>data[j]:
				data[i],data[j] = data[j], data[i]
	print()

data = [16,25,39,27,12,8,45,63]
print("原始值:")
for i in range(8):
	print("%3d" % data[i], end="")
print("\n---------------------------------------")
select(data)
print("排序后的数据:")
for i in range(8):
	print("%3d" % data[i], end="")
print("")