简单选择排序的几个优化点

本文介绍了一种优化简单选择排序的方法,通过同时寻找最大值和最小值减少比较次数,并在最大值等于最小值时提前结束排序,提高了排序效率。

简单选择排序的几个优化点

import random
l = [random.randint(1,100) for _ in range(20)]
print(l)
for i in range(len(l)//2):
	minindex = i
	maxindex = -i-1
	for j in range(i+1, len(l)-i):
		if l[j] < l[minindex]:
			minindex = j
		if l[-j-1] > l[maxindex]:
			maxindex = -j-1
	if l[maxindex] == l[minindex]: #当一个数列的最大值和最小值相等时,说明已排序完成
		break
	if minindex != i:
		l[i],l[minindex] = l[minindex],l[i]
		if maxindex == i or maxindex == i-len(l):  #正负索引匹配     
			maxindex = minindex  #当最大值的索引在i上时,由于i和minindex交换了位置,所以需要把minindex的索引赋值给maxindex
	if (maxindex != -i-1 or maxindex != len(l)-1-i) and (l[-i-1] != l[maxindex]): #当minindex的原始索引和被交换过后的索引值相同时,表示排序完成
		l[maxindex],l[-i-1] = l[-i-1],l[maxindex]
print(l)

即使经过简单的优化,选择排序的效率也很低,他的时间复杂度为O(n^2),不过他减少了交换次数,比冒泡法的性能稍好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值