算法原理:
假如我有一个序列[23, 7, 3, 50, 4, 26, 1], 首先我在这个序列中寻找最小的元素,然后找到了最小的元素是1。然后我就将这个最小的元素和这个序列第一个元素23进行交换,现在就得到了这个新序列[1, 7, 3, 50, 4, 26, 23]. 这个序列被分成了两部分,一部分是1这个已经排好序的子序列,另外一个是没有排好序的子序列 7, 3, 50, 4, 26, 23. 接下来在这个未排序的子序列7, 3, 50, 4, 26, 23寻找最小的元素。好了,找到了最小的元素是3(原序列中第二小的元素),于是将3和原序列中第二个元素的位置进行交换,就有了现在这个序列 [1, 3, 7, 50, 4, 26, 23],其中1和3是已经排好序的。于是又在7, 50, 4, 26, 23中找到第三小的元素,再将这个元素和[1, 3, 7, 50, 4, 26, 23]中第三个元素的位置进行交换,如果此元素本来就是第三小且位于[1, 3, 7, 50, 4, 26, 23]的第三个元素,则保持位置不变。就这样依次循环下去找剩下的未排序中的最小的元素,再进行位置交换最后就得到了一个排好序的序列。
### selection sort ###
def selection_sort(data_list):
n = len(data_list)
for j in range(n-1):
smallest = j
for i in range(j+1, n):
if data_list[i] < data_list[smallest]:
smallest = i
if smallest != j:
replace = data_list[j]
data_list[j] = data_list[smallest]
data_list[smallest] = replace
return data_list
if __name__ == '__main__':
A = [10,2,4,23,1,9]
data_list = selection_sort(A)
print(data_list)