关于三种简单排序的操作
admin
2023-01-29 02:00:07
0

一、关于插入排序的一些想法与实现,插入排序的原理是在序列前增加一个哨兵,通过哨兵的值与前面比较,如果需要改变的话直接覆盖掉与哨兵值的位置,最后可以将哨兵填充到新的空缺位置,按照排序的定义意思就是直接在新的列表前直接补一个索引为0的位置填充一个零
nums=[1,9,8,5,6,7,4,3,2]
nums=[0]+nums
length=len(nums)
for i in range(2,length):
nums[0]=nums[i]
j=i-1
if nums[j]>nums[0]:
while nums[j]>nums[0]:
nums[j+1]=nums[j]
j-=1
nums[j+1]=nums[0]
nums.pop(0)
print(nums)

这是基础的代码,但是为什么一定要在列表前面添加一个索引为零的哨兵呢,我的想法是完全可以用一个额外的值来代替这个在列表里的操作啊,这样省着前面填充,后面又移除。
nums=[1,9,8,5,6,7,4,3,2]
length=len(nums)

for i in range(1,length):
sentry=nums[i]
j=i-1
if nums[j]>sentry:
while nums[j]>sentry:
nums[j+1]=nums[j]
j-=1
nums[j+1]=sentry
print(nums)

这样下来也可以实现,但同时也有一个小问题就是哨兵在的时候一般比到哨兵就截止了,这种前面×××,如果最大值是1的话,容易直接减到负索引超界,所以在第二个循环中加了个判断条件就是减到负索引就可以停止了,这样可以处理最大值在第一的情况。
nums=[10,9,8,5,6,7,4,3,2]
length=len(nums)

for i in range(1,length):
sentry=nums[i]
j=i-1
if nums[j]>sentry:
while nums[j]>sentry:
nums[j+1]=nums[j]
j-=1
if j==-1:
break
nums[j+1]=sentry
print(nums)

如果继续优化的话,就是在进入有序区之后可以进行折半查找,会少许的提升效率。
二、选择排序
选择排序是一种比冒泡排序稍微优化一点的算法,本质上是在每一趟选出一个最值,然后直接与队列的头或者尾交换,最后得出排列顺序的一种排序算法,与冒泡的优化是一趟下来交换的次数小。但是与此同时不能提前结束,所以从效率上来讲是差不多的。
lst=[1,9,8,5,6,7,4,3,2]
length=len (lst)
for i in range (length):
maxer=i
for j in range(i+1,length):
if lst[maxer]maxer=j

lst[i],lst[maxer]=lst[maxer],lst[i]

print(lst)

这个是简单的快速排序,在这个排序中的缺点是没有提前结束,我们想能不能在一趟中同时把最大值与最小值选出来
lst=[1,9,8,5,6,7,4,3,2]
length=len (lst)
for i in range (length//2):
maxer=i
miner=-i-1
for j in range(i+1,length-i):
if lst[maxer]maxer=j
if lst[-j-1]miner=-j-1
if lst[miner]==lst[maxer]:
break
if maxer !=i:
lst[i],lst[maxer]=lst[maxer],lst[i]
if miner==i or miner==i-length:
miner=maxer-length
if miner !=-i-1:
lst[-i-1],lst[miner]=lst[miner],lst[-i-1]
print(lst)

三、冒泡排序
nums=[1,2,3,4,5,6,7,8,9]
#nums=[1,9,8,5,6,7,4,3,2]
length=len(nums)
count=0
scount=0
for i in range(9):
count+=1
flag=False
for j in range(8-i):
if nums[j]>nums[j+1]:
tmp=nums[j]
nums[j]=nums[j+1]
nums[j+1]=tmp
scount+=1
flag=True
if not flag:
#if flag==False:
break
print(nums,count,scount)

相关内容

热门资讯

【网信普法】这些互联网法律法规... 《网络安全法》是我国第一部全面规范网络空间安全管理方面问题的基础性法律,是我国网络空间法治建设的重要...
最新引进“微友江西麻将是不是有... 有 亲,根据资深记者爆料微友江西麻将是可以开挂的,确实有挂(咨询软件无需...
玩家分享攻略“胡乐晋中麻将辅助... 家人们!今天小编来为大家解答胡乐晋中麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
终于了解“老表逗娱碰胡开挂神器... 终于了解“老表逗娱碰胡开挂神器?”(外卦神器下载)您好,老表逗娱碰胡这个游戏其实有挂的,确实是有挂的...
重磅消息“天天爱麻将到底有挂吗... 网上科普关于“天天爱麻将有没有挂”话题很是火热,小编也是针对天天爱麻将作*弊开挂的方法以及开挂对应的...
玩家攻略科普“白金岛麻将圈到底... 网上科普关于“白金岛麻将圈有没有挂”话题很是火热,小编也是针对白金岛麻将圈作*弊开挂的方法以及开挂对...
今日重大发现“欢乐茶坊到底是不... 网上科普关于“欢乐茶坊有没有挂”话题很是火热,小编也是针对欢乐茶坊作*弊开挂的方法以及开挂对应的知识...
今日重磅消息“约约麻将有挂吗?... 今日重磅消息“约约麻将有挂吗?”(确实真的有挂)您好,约约麻将这个游戏其实有挂的,确实是有挂的,需要...
今日重大发现“聚友茶楼真的有挂... 今日重大发现“聚友茶楼真的有挂吗?”(原来真的有挂)您好,聚友茶楼这个游戏其实有挂的,确实是有挂的,...
终于了解“微乐南昌麻将辅助器?... 家人们!今天小编来为大家解答微乐南昌麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...