‘’’
选择排序:每轮都是一个固定位置的数和其它的数比较,若小于就
互换位置,反之依然。每轮会在首部产生最大(或最小)数。每轮
循环的数字个数在减少。
第1轮 0~8
第2轮 1~8
第3轮 2~8
‘’’
print('选择排序:')
l=[6,8,9,2,3,1,4,5,7]
for i in range(len(l)-1):#最后一个数不参与比较
print("第%s轮"%(i+1))
for j in range(i+1,len(l)):
if l[i]>l[j]:
temp=l[i]
l[i]=l[j]
l[j]=temp
print("%s和%s互换"%(l[i],l[j]))
print(l)#打印每一轮的结果
#冒泡排序:
‘’’
冒泡排序:每轮相邻的两个数比较,如果前者大于后者就互换位置
或反之,每轮都会在尾部产生出最大(或最小)的数,所以每轮比较的个数在递减
第1轮 0~8
第2轮 0~7
第3轮 0~6
‘’’
print('*'*20)
print('冒泡排序:')
l=[6,8,9,2,3,1,4,5,7]
for i in range(len(l)-1):#第一个不参与比较,i第几轮
print("第%s轮"%(i+1))
ischange=False#标记这个很NPA
for j in range(len(l)-1-i):#j表示当前位置角标,和j+1比较
if l[j]>l[j+1]:
temp=l[j]
l[j]=l[j+1]
l[j+1]=temp
print("%s和%s互换"%(l[j],l[j+1]))
ischange=True
if ischange:
print(l)
else:
print('该轮没有发生交换')
continue
‘’’
插入排序,整扑克
每一轮只要出现数字互换位置,该小(被交换)的数字一定要与前面的数字
逐一比较,直到首部或不用互换位置的情况。
l=[6,8,9,2,3,1,4,5,7]
第一轮:开始位置l[1]=8(str[0]不和自己比)8>6不换
第二轮:开始位置l[2]=9,9>8不换
第三轮:开始位置l[3]=2,和前一位比较2<9,换。比较位置前移2<8,换。比较位置
前移2<6,换。到头了,停止。
第四轮:开始位置l[4]=3,和前一位比较3<9,换。比较位置前移3<8,换。比较位置
前移3<6,换。比较位置前移,3>2,不换(已确定2前面的都是有序的)。
第五轮:开始位置l[5]=1,和前一位比较1<9,换。比较位置前移1<8,换。比较位置
前移1<6,换。比较位前移,1<3,换,比较位置前移1<2,换。到头了,停。
第六轮:开始位置l[6]=4,和前一位比较4<9,换。比较位置前移4<8,换。比较位置
前移4<6,换。比较位置前移4>3,不换。
第七轮:开始位l[7]=5,5<9,换。比较位置前移5<8,换。比较位置
前移5<6,换。比较位置前移5>4,不换。
第八轮:开始位置l[8]=7,和前一位比较7<9,换。比较位置前移7<8,换。
比较位置前移7>6,不换.
比较完毕,输出。
‘’’
l=[6,8,9,2,3,1,4,5,7]
print("*"*20)
print('插入排序:')
for i in range(len(l)-1):
ischange=False#使用标记方便判断
for j in range(i+1,0,-1):#j的取值从i+1向0递减,每次-1
if l[j]<l[j-1]:
temp=l[j]
l[j]=l[j-1]
l[j-1]=temp
print('%s和%s互换'%(l[j],l[j-1]))
ischange=True
if ischange:
print(l)
else:
print("本次没有交换!!")
continue