#递归版插入排序:将目标序列中的第i个元素进行排序,首先要对i-1个元素进行递归性排序
def ins_sort_rec(seq,i):
if i==0: return
ins_sort_rec(seq,i-1)
j=i
while j>0 and seq[j-1]>seq[j]:
seq[j-1],seq[j]=seq[j],seq[j-1]
j-=1
#非递归版插入排序:从第二个元素开始排序,一直到最后一个元素。以上两个版本的行为其实是相同的。
def ins_sort(seq):
for i in range(1,len(seq)):
j=i
while j>0 and seq[j-1]>seq[j]:
seq[j-1],seq[j]=seq[j],seq[j-1]
j-=1
#递归版选择排序:先找到最大的元素,并将其放在n的位置上,然后继续递归排序剩下的元素
def sel_sort_rec(seq,i):
if i==0: return
max_j=i
for j in range(i):
if seq[j]>seq[max_j]:max_j=j
seq[i],seq[max_j]=seq[max_j],seq[i]
sel_sort_rec(seq,i-1)
#非递归版选择排序
def sel_sort(seq):
for i in range(len(seq)-1,0,-1):
max_j=i
for j in range(i):
if seq[j]>seq[max_j]:max_j=j
seq[i],seq[max_j]=seq[max_j],seq[i]
if __name__=="__main__":
import random
seq=[random.randint(0,99) for i in range(20)]
ins_sort_rec(seq,19)
print(seq)
seq2=[random.randint(0,99) for i in range(20)]
ins_sort(seq2)
print(seq2)
seq3=[random.randint(0,99) for i in range(20)]
sel_sort_rec(seq3,19)
print(seq3)
seq4=[random.randint(0,99) for i in range(20)]
sel_sort(seq4)
print(seq4)