排序算法之选择排序
之前那篇文章的冒泡排序是比较容易理解的,但是实际情况下正常人一般不会这么做的。因为做了太多的无用工作,交换工作。因为并不能确定那个数最终就在那个位置,所以替换工作根本就不需要做。一种改进的思路就是比较完大小之后只需要记住较大的数值的下标即可(当然这适用于顺序表,链表下感觉不是很行得通,因为链表记住后还得逐步遍历,不划算),不用交换。一轮循环完之后,主需要把最后的元素和记住的下标元素进行交换即可。
虽然时间复杂度还是O(n^2),但是交换工作不需要做了,还是优化了一点点的。
# 选择排序
def sel_search(alist):
for i in range(len(alist) - 1):
index = 0
for j in range(len(alist) - 1 - i):
if alist[index] < alist[j]:
index = j
# print(index)
alist[index], alist[len(alist)-1-i] = alist[len(alist)-1-i], alist[index]
# print(alist)
alist = [2,7,5,84,10,1,3]
sel_search(alist)
print(alist)