排序三人组(冒泡,选择,插入)

冒泡排序(相邻两数比较):
稳定
平均/最好/最坏时间复杂度:O(n2)/O(n)/O(n2)
1.列表长度为N,遍历n-1次,每相邻两个数比较,如果前面大,则交换这两个数
2.每一趟之后,最大的数会被放到最后。无序区-1,有序区+1
注意:多少趟,无序区的范围,不再进行交换时的优化

def bubble_sort(list):
	n=len(list)
	for i in range(n-1): #需要n-1趟
		flag = False
		for j in range(0,n-i-1): #每一趟比较n-i-1次,括号内前闭后开
			if list[j]>list[j+1]: #比较相邻两个数大小
				list[j],list[j+1]=list[j+1],list[j]	#前大后小就倒腾一下
				flag = True 
		#print(list)
		if not flag: #不换了就不比了,大小顺序捋好了
			break

选择排序(找最小值索引)
不稳定
平均/最好/最坏:O(n2)/O(n2)/O(n2)
长度为N的数组,遍历n-1次,找出每一趟最小值,放到当下无序区第一个位置
注意:遍历次数;如何通过比较找到无序区最小值(定义第一个为最小值的位置,比较之后倒腾);无序区的长度;

def select_sort_test(list):
	n=len(list)
	for i in range(n-1): #比较n-1次
		min=i  #先将无序区第一个位置假定为最小数的索引用于比较
		for j in range(i+1,n): #无序区范围,遍历无序区找最小值
			if list[j]<list[min]: #比较后面的数和无序区第一个位置的大小
				min=j  #这一层遍历就是在找无序区最小的值的索引
		list[min],list[i]=list[i],list[min]	#将一趟的最小值放到头上

插入排序(一步一步找坑位)
稳定
平均/最好/最坏:O(n2)/O(n)/O(n2)
有序区先放一个,从无序区摸牌比较,插入有序区
注意:将拿到的牌与有序区比较时,应该放到哪个位置,范围是什么

def insert_sort_test(list):
	n=len(list)
	for i in range(1,n): #从无序区摸牌,i
		tmp=list[i]  #存一下摸到的牌值
		j=i-1 #j表示手中有序区的牌的位置,从无序区前一个开始比较
		while j>=0 and tmp<list[j]: #找到刚好比手中牌大的位置或者最开头
			list[j+1]=list[j]	#比j位置上的小,就把j上的位置往后挪一个腾空
			j-=1	#再与往前一个位置的牌作比较
		list[j+1]=tmp	#找到坑位后插下牌

明天看快排,冲冲冲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值