排序算法小结(python 实现)

1 直接插入排序

#每次将一个待排元素按照其大小排到合适的位置
def insertsort(value):
    n = len(value)
    for i in range(1,n):
        temp = value[i]
        #print(temp)
        j = i-1
        while j >= 0 and temp < value[j]:
            value[j+1] = value[j]
            j -= 1
        value[j+1] = temp
    return value
print(insertsort(l))

2 冒泡排序

#每趟比较出最大的放最后
def bubblesort(value):
    n = len(value)
    flag = 0
    for i in range(n):
        for j in range(n-i-1):
            if value[j] > value[j+1]:
                value[j+1], value[j] = value[j], value[j+1]
                flag = 1
        if flag == 0:
            break
    return value
print(bubblesort(l))

3 快速排序

#每次将轴放到合适的位置
def quicksort(value,l,r):
    i,j = l,r
    if l<r:
        temp = value[l]
        while i != j:
            while i<j and value[j]>temp:
                j -= 1
            if i<j:
                value[i] = value[j]
                i += 1
            while i<j and value[i]<temp:
                i += 1
            if i<j:
                value[j] = value[i]
                j -= 1
        value[i] = temp
        quicksort(value,l,i-1)
        quicksort(value,i+1,r)

quicksort(l,0,len(l)-1)
print(l)

4 选择排序

#每次选最小的
def selectsort(value):
    l = len(value)
    for i in range(l):
        temp = value[i]
        k = i
        for j in range(i+1,l):
            if value[j]<temp:
                temp = value[j]
                k = j
        value[k] = value[i]
        value[i] = temp
    return value
print(selectsort(l))

5 堆排序

#建堆,注意下标
def adjust_heap(value,i,n):
    l = 2*i
    r = 2*i+1
    max = i
    if l<=n:
        if value[l]>value[i]:
            max = l
        if r<=n and value[r]>value[max]:
            max = r
        if max != i:
            value[max],value[i] = value[i],value[max]
            adjust_heap(value,max,n)

def heap_sort(value):
    n = len(value)-1
    for i in range(n/2,0,-1):
        adjust_heap(value,i,n)
    for j in range(n,1,-1):
        value[1],value[j] = value[j],value[1]
        adjust_heap(value,1,j-1)
    return value
print(heap_sort(l))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值