十大排序算法

十大排序算法

经典排序

def puzzle_sort(lst):
    n=len(lst)
    for i in range(n-1):
        for j in range(i+1,n):
            if lst[i]>lst[j]:
                lst[i],lst[j]=lst[j],lst[i]

冒泡排序

def bubble_sort(lst):
    n=len(lst)
    for i in range(n):
        for j in range(1,n-i):
            if lst[j-1]>lst[j]:
                lst[j-1],lst[j]=lst[j],lst[j-1]

选择排序

#此处为选择排序,首先挑出最小的,逐渐遍历选择最小的
def selection_sort(lst):
    n=len(lst)
    for i in range(n-1):
        min_index=i
        for j in range(i+1,n):
            if lst[j]<lst[min_index]:
                min_index=j
        lst[i],lst[min_index]=lst[min_index],lst[i]
    return lst

快速排序

#此处为选择排序,首先挑出最小的,逐渐遍历选择最小的
def quick_sort(lst):
    n=len(lst)
    if n<=1:
        return lst
    baseline=lst[0]
    left=[lst[i] for i in range(1,len(lst)) if lst[i]<baseline]
    right=[lst[i] for i in range(1,len(lst)) if lst[i]>=baseline]
    return quick_sort(left)+[baseline]+quick_sort(right)

归并排序

def merge_sort(lst):
    n=len(lst)
    if n<=1:
        return lst
    mid=n//2
    left=lst[:mid]
    right=lst[mid:]
    left=merge_sort(left)
    right=merge_sort(right)
    res=[]
    i=j=0
    while i<len(left) and j <len(right):
        if left[i]>right[j]:
            res.append(right[j])
            j+=1
        else:
            res.append(left[i])
            i+=1
    res+=left[i:]+right[j:]
    return res
   
#版本二
def merge_sort(lst):
    def merge(left,right):
        #此处采取双指针的思想来进行运算
        i=j=0
        result=[]
        while i<len(left)&j<len(right):
            if left[i]<=right[j]:
                result.append(left[i])
                i+=1
            else:
                result.append(right[j])
                j+=1
        result+=left[i:]+right[j:]
        return result
    n=len(lst)
    if n<=1:
        return lst
    mid=n>>1
    left=merge_sort(lst[:mid])
    right=merge_sort(lst[mid:])
    return merge(left,right)

插入排序

def insertion_sort(lst):
    for i in range(1,len(lst)):
        cur_index=i
        while cur_index-1>=0 and lst[cur_index-1]>lst[cur_index]:
            lst[cur_index-1],lst[cur_index]=lst[cur_index],lst[cur_index-1]
            cur_index-=1
    return lst

希尔排序

def shell_sort(lst):
    n=len(lst)
    gap=n//2
    while gap:
        for i in range(gap,n):
            ind=i
            while (ind>=gap)&(lst[ind]<lst[ind-gap]):
                lst[ind],lst[ind-gap]=lst[ind-gap],lst[ind]
                ind-=gap
        gap//=2
    return lst

总结

难的雅痞。其他排序不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值