import numpy as np
a=np.random.randint(1,100,10)
c=0
print(a)
依次从左到右取一下值,后这个值后面的所有值比较,如果比较少就设此索引为最小值索引。每一轮结束,交换最小索引值和当前值。
优化前,循环45次
for i in range(len(a)-1):
key=i
for j in range(i+1,len(a)):
c+=1
if a[key]>a[j]:
key=j
if key!=i:
a[key],a[i]=a[i],a[key]
每轮交换,交换出最小值和最大值,
优化后,外循环次数减半,每轮内循环减掉一个数,循环25次
for i in range(len(a)//2):
key_min=i
key_max=-i-1
for j in range(i+1,len(a)-i):
c+=1
if a[key_min]>a[j]:
key_min=j
if a[key_max]<a[-j-1]:
key_max=-j-1
if key_min!=i:
a[key_min],a[i]=a[i],a[key_min]
if key_max==-(len(a)-i):
key_max=key_min
if key_max!=-i-1:
a[key_max],a[-i-1]=a[-i-1],a[key_max]
print(a,c)