简单选择排序的几个优化点
import random
l = [random.randint(1,100) for _ in range(20)]
print(l)
for i in range(len(l)//2):
minindex = i
maxindex = -i-1
for j in range(i+1, len(l)-i):
if l[j] < l[minindex]:
minindex = j
if l[-j-1] > l[maxindex]:
maxindex = -j-1
if l[maxindex] == l[minindex]: #当一个数列的最大值和最小值相等时,说明已排序完成
break
if minindex != i:
l[i],l[minindex] = l[minindex],l[i]
if maxindex == i or maxindex == i-len(l): #正负索引匹配
maxindex = minindex #当最大值的索引在i上时,由于i和minindex交换了位置,所以需要把minindex的索引赋值给maxindex
if (maxindex != -i-1 or maxindex != len(l)-1-i) and (l[-i-1] != l[maxindex]): #当minindex的原始索引和被交换过后的索引值相同时,表示排序完成
l[maxindex],l[-i-1] = l[-i-1],l[maxindex]
print(l)
即使经过简单的优化,选择排序的效率也很低,他的时间复杂度为O(n^2),不过他减少了交换次数,比冒泡法的性能稍好