选择排序符合人类直观,容易理解。工作过程:
(第一轮)先选择数组array的第一个元素,即array[0]作为被对比对象,然后从数组array的第2个位置即array[1](常规情况如此,当然你也可以从右边开始),扫描整个数组,找出最小的数据min_value,然后将这个min_value和array数组中的第一个数据(即array[0])交换。
(第二轮)选择数组中的第二个元素,即array[1],然后从array[1]后面的数据中选择最小的数据与array[1]交换。
如此循环往复,最终多轮,直到将数据选择完毕。
举例,现在有5个未排序数据,[3,4,0,1,2],使用选择排序排序。
(第1轮)选择第1个数据:3,扫描剩余的4,0,1,2,发现0是最小数据,把3和0交换。新数组变为[0,4,3,1,2]
(第2轮)选择第2个数据:4,扫描剩余的3,1,2,发现1是最小数据,把4和1交换。新数组变为[0,1,3,4,2]
(第3轮)选择第3个数据:3,扫描剩余的4,2,发现2是最小数据,把3和2交换。新数组变为
[0,1,2,4,3]
(第4轮)选择第4个数据:4,扫描剩余的3,发现3是最小数据,把4和3交换。新数组变为
[0,1,2,3,4]
python代码例子:
def app():
data = [3, 4, 0, 1, 2]
print('没有排序前', data)
print('-----')
selection_sort(data)
print('选择排序后', data)
# 选择排序
def selection_sort(data):
for i in range(len(data) - 1):
j = i + 1
min_value = data[i]
min_index = i
while True:
if j == len(data):
break
if data[j] < min_value:
min_value = data[j]
min_index = j
j = j + 1
temp = data[i]
data[i] = min_value
data[min_index] = temp
print('第', (i + 1), '轮', data)
if __name__ == '__main__':
app()
输出:
没有排序前 [3, 4, 0, 1, 2]
-----
第 1 轮 [0, 4, 3, 1, 2]
第 2 轮 [0, 1, 3, 4, 2]
第 3 轮 [0, 1, 2, 4, 3]
第 4 轮 [0, 1, 2, 3, 4]
选择排序后 [0, 1, 2, 3, 4]
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://zhangphil.blog.csdn.net/article/details/121308496
内容来源于网络,如有侵权,请联系作者删除!