用python写一下常见的排序算法

希尔 根据步长而不同,最优时间复杂度:O(n),平均时间复杂度:根据步长而不同

希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。

def shell_sort(list):
    n=len(list)
    gap=round(n/2)
    while gap > 0:
        for i in range(gap,n):
            j=i
            while j >= gap and list[j-gap]>list[i]:
                list[j],list[j-gap]=list[j-gap],list[j]
        gap=round(gap/2)
    return list

冒泡 时间复杂度:O(n^2),最优时间复杂度:O(n),平均时间复杂度:O(n^2)

def bubble_sort(list):
    length = len(list)
    for index in range(length):
        for j in range(1, length - index):
            if list[j - 1] > list[j]:
                list[j - 1], list[j] = list[j], list[j - 1]
    return list
list=input().split()
list=[int(x) for x in list]
print(bubble_sort(list))

快速排序 O(n^2),最优时间复杂度:O(nlogn),平均时间复杂度:O(nlogn)

import random
def fastsort(list,star,end):
    if star<end:        
        i,j=star,end
        hh=list[i]
        while i<j:
            while (i<j) and (list[j]>=hh):
                j-=1
            list[i]=list[j]
            while (i<j) and (list[i]<=hh):
                i+=1
            list[j]=list[i]
        list[i]=hh
        fastsort(list,star,i-1)
        fastsort(list,j+1,end)
    return list
list=[random.randint(0,999) for _ in range(10)]
fastsort(list,0,len(list)-1)
print(list)

选择排序 时间复杂度:O(n^2),最优时间复杂度:O(n^2),平均时间复杂度:O(n^2)

import random
def select_sort(list):
    for i in range(len(list)):
        min=i
        for j in range(i+1,len(list)):
            if list[j]<list[min]:
                min=j
        list[i],list[min]=list[min],list[i]
    return list
list=[random.randint(0,999) for _ in range(10)]
print(list)
print(select_sort(list))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值