一、常用排序:
选择排序、冒泡法排序、插入排序、计数排序(桶排序)等。
二、选择排序:
思路:在一个列表中,按照角标位置来选择值放入。主要用两个循环嵌套,外循环用于遍历角标位置,内循环比较值进而选择值放入对应角标位置。
代码:
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)
六、注意:
虽说每种排序具体书写的代码有所差异但其所对应的原理和思路都是确定的,只要掌握好原理思路就可以做到万变不离其宗。