python3——选择、冒泡、插入排序

‘’’
选择排序:每轮都是一个固定位置的数和其它的数比较,若小于就
互换位置,反之依然。每轮会在首部产生最大(或最小)数。每轮
循环的数字个数在减少。
第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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值