冒泡排序
顾名思义,冒泡排序可以根据实际要求实现大数下沉小数上浮的效果。
a=[1,2,33,2,45,56]
n=len(a)
i=0
for i in range (n):
for j in range (i,n-1):
if a[j]<a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
print(a)
上述当中通过使用嵌套语句,两个for循环遍历a列表中的值,利用i变量控制循环次数,实现将a中的值降序排序。但这是最基本的排序,一但数据量十分庞大,就会大大加大计算机的运算量,(时间复杂度为n**2)由此,我们可以实现优化。
法1:
a=[1,2,33,2,45,56]
n=len(a)
i=0
for i in range (n):
flag=False
for j in range (i,n-1):
if a[j]<a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
flag=True
elif flag==False:
break
print(a)
通过使用flag判断当次循环中是否存在数值交换,从而判断列表是否已经有序,减少运行次数。
法2:
a=[1,2,33,2,45,56]
n=len(a)
b=n-1
for i in range (n):
for j in range (i,b):
if a[j]<a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
b=j
print(a)
在遍历时设置b变量,用来记住这次完整遍历的最后一个位置,省去重复多余操作,缩小范围。
选择排序
a=[1,2,33,2,45,56]
n=len(a)
max_l=a[0]
for i in range (n):
max=max_l
for j in range (i,n):
if a[j]>max:
max_l=a[j]
for m in range (j,n-1):
a[m]=a[m+1]
a[n-1]=max_l
print(a)
通过查找a中的最大值,然后将其放入最后(或最前),实现升(降)序。
插入排序
a=[1,2,33,2,45,56]
n=len(a)
i=0
for i in range (1,n):
key=a[i]
j=i-1
while j!=0 and key>a[j]:
a[j+1]=a[j]
j-=1
a[j]=key
print(a)
选定a中的key,接着在一定区域内一一比较,找到插入点进行赋值,实现排序功能。
桶排序
桶的思想很有趣也很微妙,它不但可以实现排序功能,还可以实现计数以及数据是否存在等功能。
a=[1,2,33,2,45,56]
n=len(a)
b=[]
m=0
i=0
for i in range (n):
max=a[i]
j=1
while j<n:
if a[j]>max:
max=a[j]
j+=1
b[m]=max #实现降序排序
m+=1
a.pop(j-1)
n=len(a)
print(b)
将b列表作为桶,通过依次找出a中的max,将其放入b中实现有序。利用字典的方法即可实现字符计数的功能。
希望对您有帮助,多多关注。有问题及时向小编反应🙏,小编还在成长,不足之处多加体谅😂。