Python 常用排序

本文详细介绍了四种常见的排序算法:选择排序、冒泡法排序、插入排序和计数排序(桶排序)。通过代码实例展示了每种算法的工作原理,帮助读者理解排序算法的基本思路。此外,还特别提到了计数排序的特点,它利用计数原理避免了数值比较,提高了排序效率。掌握这些排序算法的原理,对于编程实践大有裨益。
摘要由CSDN通过智能技术生成

一、常用排序:

选择排序、冒泡法排序、插入排序、计数排序(桶排序)等。

二、选择排序:

思路:在一个列表中,按照角标位置来选择值放入。主要用两个循环嵌套,外循环用于遍历角标位置,内循环比较值进而选择值放入对应角标位置。

代码:

ls = [8,5,7,3]
for i in range(0,4):
	for j in range(i + 1,4):
		if ls[i] > ls[j]:
			ls[i],ls[j] = ls[j],ls[i]
print(ls)

三、冒泡法排序:

思路:将每个值往某个方向按一定规则移位,移得动就移移不动就停下。主要用两个循环嵌套,外循环给到移位的机会,内循环比较数值大小看能否移位。

代码:

ls = [4,5,7,8,2,9]
for i in range(0,5):
	for j in range(0,5 - i):
		if ls[j] > ls[j + 1]:
			ls[j],ls[j + 1] = ls[j + 1],ls[j]
print(ls)

四、插入排序:

思路:定位一个值(指向一个值),在划定一个范围,让该值在这个范围中进行比较,最后插入在属于它的位置。主要用两个循环嵌套,外循环给到插入的机会,内循环划定范围,且进行比较进而插入。

代码:

ls = [5,8,7,6,3]
for i in range(1,5):
	for j in range(i,0,-1):
		if ls[j] < ls[j - 1]:
			ls[j],ls[j - 1] = ls[j - 1],ls[j]
print(ls)

五、计数排序(桶排序):

特点:可以在一定程度上避免使用数值比较来排序,转而用计数原理来排序。

思路:两个列表,两个循环。

两个列表:

一个列表将其长度设为原列表中最大值加一,初值全部赋0,用其角标对应原列表中的元素进行计数。

另一个列表可以直接设为空列表,或设为长度为原列表长度初值全部赋0的列表,用于按顺序盛放元素。(这讲的设空列表这种,不过差别不大)

两个循环:

一个循环用于统计原列表中的元素出现次数,并按顺序存入计数列表中。

另一个循环用于依照计数列表的数据,按顺序在空列表后加值,完成排序。

代码:

#录入原始列表
x = 0
ls1 = []
while True:
	z = int(input("请输入一个你要进行排序的列表(输入888时停止):"))
	if z == 888:
		break
	ls1.append(z)
#设置两个列表
max_ls1 = max(ls1) + 1
ls2 = [0] * max_ls1
ls3 = []
#用于计数
for i in ls1:
	for j in range(0,max_ls1 + 1):
		if i == j:
			ls2[j] += 1
#用于在ls3中按顺序盛放元素
for i in range(0,max_ls1):
	if ls2[i] != 0:
		for j in range(0,ls2[i]):
			ls3.append(i)
print(ls3)

六、注意:

        虽说每种排序具体书写的代码有所差异但其所对应的原理和思路都是确定的,只要掌握好原理思路就可以做到万变不离其宗。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值