python排序算法

各种排序算法分类

1、插入排序

1)直接插入法:把列表分两部分,待插入与被插入部分,不断从待插入表中获取元素插入被插入表中

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

2)希尔排序法:

def shell_sort(L):
    step = len(L)//2
    while step>0:
        for i in range(step,len(L)):
            while i >= step and L[i] < L[i-step]:
                L[i],L[i-step] = L[i-step],L[i]
                i -= 1

        step = step//2
    return L

2、选择排序

1)直接选择排序法

def select_sort(L):
    for i in range(len(L)):
        for j in range(len(L)-1,i,-1):
            if L[j-1] > L[j]:
                L[j],L[j-1] = L[j-1],L[j]
    return L

2)堆排序法

#堆排序属于选择排序
#时间nlogn 空间(1),不稳定
def big_endian(arr,start,end):
    root = start
    while True:
        child = root*2+1
        if child > end :
            break
        if child + 1 <= end and arr[child] < arr[child+1]:
            child += 1
        if arr[root] < arr[child]:
            arr[root],arr[child] = arr[child],arr[root]
            root = child
        else :
            break

def heap_sort(array):
    first = len(array)
    for start in range(first-1,-1,-1):
        big_endian(array,start,first-1)
    for end in range(first-1,0,-1):
        array[0],array[end] = array[end],array[0]
        big_endian(array,0,end-1)
    return array


array = [222,3,45,2,1,0,7,9,7,3,9]
print(heap_sort(array))

3、交换排序

   1)冒泡排序

#冒泡排序属于交换排序
#时间复杂度O(n^2),空间O(1),稳定
def bubble_sort(array):
    length = len(array)
    for i in range(length-1,0,-1):
        for j in range(i):
            if array[j] > array[j+1]:
                array[j],array[j+1] = array[j+1],array[j]
    return array
array = [5,8,5,3,22,4,6,8,1]
print(bubble_sort(array))

2)快速排序

#快速排序属于交换排序,
# 平均时间复杂度O(nlogn),
# 空间复杂度O(nlogn),
# 不稳定
#实现代码“分而治之+递归”
def quick_sort(array):
    if len(array) <= 1:
        return array
    else:
        mid = array[0]
        less_array = [m for m in array[1:] if m < mid]
        equ_array = [m for m in array if m == mid]
        bigger_array = [m for m in array[1:] if m > mid]
        return quick_sort(less_array) + equ_array + quick_sort(bigger_array)
array = [7,6,4,9,5,0,3,1,5,1,9]
print(quick_sort(array))

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值