设有列表
n=10
nums=list(range(n))
简单选择排序
降序:第一步:n个数从左至右,索引从0开始至n-1,两两依次比较,记录最大索引,将大数和索引0数交换,如果大数就是索引0,则不交换;第二步从索引1开始比较…
升序:相反操作。
for i in range(n):
maxindex=i #假定最大值索引
for j in range(maxindex+1,n):
if nums[j]>nums[maxindex]:
maxindex=j
if maxindex !=i:
nums[i],nums[maxindex]=nums[maxindex],nums[i]
print(nums)
二元排序
每一趟同时找出最大值和最小值。
for i in range(n//2): #计数器,需要走的趟数为n//2
maxindex=i
minindex=-1-i
minorigin=minindex+n #转化为正索引,供下面进行比较使用
for j in range(maxindex+1,n-i): #i为右边有序区的个数
if nums[j]>nums[maxindex]:
maxindex=j
if nums[-j-1]<nums[minindex]:
minindex=-j-1
else:
minindex=minindex+n #将最小值索引转化为正索引
if maxindex !=i:
nums[i],nums[maxindex]=nums[maxindex],nums[i]
if minindex==i: #假设当最小值索引为i,那么交换最大值的时候最小值索引会变动,由i变为最大值索引的位置上
minindex=maxindex
if minindex !=minorigin: #索引都转化为正索引便于比较
nums[minorigin],nums[minindex]=nums[minindex],nums[minorigin]
选择排序不能像冒泡法一样的在某一趟提前终止。