选择排序作为,最简单的排序方法,作为排序算法的入门练习再合适不过。
选择排序
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。
算法步骤
- 选择未排序的第一个元素,依次跟其余元素进行对比,遇到比它数值小的就进行调换。
- 不断重复第1步,直到最后一个元素。
直接上图:
但是,这样是有问题的!
同一轮数据比较中,如果进行2次以上的调换,参与过调换的数据会按照与预期的排序相反的顺序出现在后续的数列中。
比如:
3、8参与过调换,也比较过大小,但他们之后出现在序列中的顺序与预期恰恰相反。需要后续再进行比较调换,人为增加了排序难度。相当于错误的利用了对比的信息。
要解决这个问题很简单,由后向前依次对比,从最后一位开始对比就可以了。
如下图
这样凡是参与过调换的数据在序列中就是以预期的顺序出现,相当于有效的利用了对比的信息。
选择排序的Python实现
先上序列,生成随机序列:
import random
def ord_list(n):
ord = list(range(n))
return ord
def ran_list(n):
ran = ord_list(n)
random.shuffle(ran)
return ran
排序代码:
def selectionSort(list):
for i in range(len(list) - 1):
# 记录最小数的索引
Index = i
for j in range(len(list)-1,i ,-1): #生成倒叙的索引
if list[j] < list[Index]:
# i 不是最小数时,将 i 和最小数进行交换
list[i], list[j] = list[j], list[i]
return list
看看效果:
if __name__=='__main__':
test_list =ran_list(10)
print(test_list)
selectionSort(test_list)
print(test_list)
'''
输出如下:
[7, 0, 9, 2, 1, 8, 6, 5, 3, 4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''
总结
这应该是最简单的算法了吧,但学习的过程总是由浅入深,由易到难,这样简单的算法也能给我们带来精神的愉悦。