实操:排序

这篇博客介绍了几种常见的排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序和归并排序,并展示了每种排序算法的应用结果。

冒泡排序

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= [9,0,4,5,1,7,8,3,6,2]
bubble_sort(li)
print(li)

结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

选择排序

def selection_sort(alist):
    n=len(alist)
    for i in range(n-1):
        min_index=i
        for j in range(i+1,n):
            if alist[j]<alist[min_index]:
                min_index=j
        if min_index !=i:
            alist[i],alist[min_index] = alist[min_index],alist[i]
li= [9,0,4,5,1,7,8,3,6,2]
selection_sort(li)
print(li)

插入排序:

def insert_sort(alist):
    for i in range(1,len(alist)):
        for j in range(i,0,-1):
            if alist[j]<alist[j-1]:
                alist[j],alist[j-1]=alist[j-1],alist[j]

li= [9,0,4,5,1,7,8,3,6,2]
insert_sort(li)
print(li)

希尔排序:

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-gap],alist[j]=alist[j],alist[j-gap]
                j-=gap

        gap=gap//2

alist=[9,0,4,5,1,7,8,3,6,2]
shell_sort(alist)
print(alist)

快速排序:

def quick_sort(alist,start,end):
    if start>=end:
        return
    mid=alist[start]
    low=start
    high=end
    while low < high:
        while low<high and alist[high]>=mid:
            high-=1
        alist[low]=alist[high]
        while low<high and alist[low]<mid:#上面有等号这里就没有等号
            low+=1
        alist[high]=alist[low]#注意赋值顺序
    alist[low]=mid
    quick_sort(alist,start,low-1)
    quick_sort(alist, low+1,end)


alist=[9,0,4,5,1,7,8,3,6,2]
quick_sort(alist,0,len(alist)-1)
print(alist)

归并排序:

def merge_sort(alist):
    if len(alist) <=1:
        return alist

    num = len(alist) //2
    left = merge_sort(alist[:num])
    right= merge_sort(alist[num:])

    return merge(left,right)

def merge(left,right):
    l,r=0,0
    result=[]
    while l<len(left) and r<len(right):
        if left[l]<right[r]:
            result.append(left[l])
            l+=1
        else:
            result.append(right[r])
            r+=1
    result += left[l:]
    result += right[r:]
    return result

alist=[9,0,4,5,1,7,8,3,6,2]
sorted_alist = merge_sort(alist)
print(sorted_alist)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值