Python中的几种常见的排序方法

  1. 冒泡排序

顾名思义,冒泡排序可以根据实际要求实现大数下沉小数上浮的效果。

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变量,用来记住这次完整遍历的最后一个位置,省去重复多余操作,缩小范围。

  1. 选择排序

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中的最大值,然后将其放入最后(或最前),实现升(降)序。

  1. 插入排序

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,接着在一定区域内一一比较,找到插入点进行赋值,实现排序功能。

  1. 桶排序

桶的思想很有趣也很微妙,它不但可以实现排序功能,还可以实现计数以及数据是否存在等功能。

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中实现有序。利用字典的方法即可实现字符计数的功能。

希望对您有帮助,多多关注。有问题及时向小编反应🙏,小编还在成长,不足之处多加体谅😂。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值