常见排序算法--python实现

常见排序算法–python实现

在这里插入图片描述
【1】稳定性是指序列中相同的数字在排序后相对位置不发生改变
【2】常见的且稳定的排序算法有冒泡、归并、插入,其余的为非稳定的排序算法

冒泡排序

def bubble_sort(alist):
    for j in range(len(alist)-1,0,-1):
        for i in range(j):
            if alist[i]>alist[i+1]:
                alist[i],alist[i+1] = alist[i+1],alist[i]
li = [54,26,93,17,77,31,44,55,20]
bubble_sort(li)
print(li)

归并排序

def merge_sort(alist):
    n = len(alist)
    if n <=1:
        return alist
    num = n //2
    left = merge_sort(alist[:num])
    right = merge_sort(alist[num:])
    return merge(left,right)
def merge(left,right):
    l,r = 0,0
    res = []
    while l <len(left) and r <len(right):
        if left[l] < right[r]:
            res.append(left[l])
            l+=1
        else:
            res.append(right[r])
            r+=1
    res+=left[l:]
    res+=right[r:]
    return res
alist = [54,26,93,17,77,31,44,55,20]
sorted_alist = merge_sort(alist)
print(sorted_alist)

插入排序

插入排序 简单记做 ‘在有序的序列中插入值’

def insert_sort(alist):
    n = len(alist)
    for i in range(1,n):
        for j in range(i,0,-1):
            if alist[j] <alist[j-1]:
                alist[j],alist[j-1] = alist[j-1],alist[j]
alist = [54,26,93,17,77,31,44,55,20]
insert_sort(alist)
print(alist)

希尔排序

一种改进的插入排序

def shell_sort(alist):
    n = len(alist)
    gap = n //2
    while gap >0:
        for i in range(gap,n):
            j = i
            while j >= gap and alist[j-gap] > alist[j]:
                alist[j],alist[j-gap] = alist[j-gap],alist[j]
                j-=gap
        gap= gap//2
alist = [54,26,93,17,77,31,44,55,20]
shell_sort(alist)
print(alist)

选择排序

在未排序中搜索到最值放在序列起始位置

def select_sort(alist):
    n = len(alist)
    for i in range(n-1):
        minindex = i
        for j in range(i+1,n):
            if alist[j] <alist[minindex]:
                minindex = j
        if minindex != i:
            alist[minindex],alist[i] = alist[i],alist[minindex]
li = [54,26,93,17,77,31,44,55,20]
select_sort(li)
print(li)

快速排序

def quick(alist):
    n = len(alist)
    if n <2:
        return alist
    else:
        base = alist[0]
        left = [i for i in alist[1:] if alist[i]<base]
        right = [i for i in alist[1:] if alist[i]>base]
        return left + [base] + right
alist = [54,26,93,17,77,31,44,55,20]
alist1 = quick_sort(alist)
print(alist1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值