Python实现常见的排序算法(快排)

冒泡排序

  • 冒泡排序
    对一个输入的列表循环n次,每次比较前后两个数,把大的数交换到后面,慢慢的沉下去,小的数自然就浮起来了,这也就是所谓的冒泡
def Bubble_sort(alist):
    n = len(alist)-1
    for i in range(n-1):
        for j in range(0,n-i):
            if alist[j] > alist[j+1]:
                alist[j],alist[j+1] = alist[j+1],alist[j]
    return alist

if __name__ == '__main__':
    alist = [15,82,5,69,94,21,57,81,6]
    Bubble_sort(alist)
    print(alist)
    
>> [5, 6, 15, 21, 57, 69, 81, 82, 94]

选择排序

  • 选择排序
  • 循环n次,每次都把最头的数作为最小数,遍历后面的所有数,把更小的数的索引记录下来,交换到头部去,
def select_sort(alist):
    n = len(alist)
    for i in range(n-1):
        index = i
        for j in range(i+1,n):
            if alist[j] < alist[i]:
                index = j
                alist[index],alist[i] = alist[i],alist[index]       
    return alist


if __name__ == '__main__':
    alist = [15,82,5,69,94,21,57,81,6]
    select_sort(alist)
    print(alist)

>> [5, 6, 15, 21, 57, 69, 81, 82, 94]

插入排序

  • 插入排序
  • 把数组分成两部分,前面一部分是排好序的,后面一部分是需要排的,取出第i个数,从后往前遍历前面一部分,找出这个数应该插入前面的哪个位置,然后进行交换。
def insert_sort(alist):
    n = len(alist)
    for i in range(1,n):
        value = alist[i]         # 插入值
       
        j = i-1
        while j >= 0 and value < alist[j]:
            alist[j+1] = alist[j]
            j -= 1
        alist[j+1] = value
    return alist


if __name__ == '__main__':
    alist = [15,82,5,69,94,21,57,81,6]
    insert_sort(alist)
    print(alist)

>> [5, 6, 15, 21, 57, 69, 81, 82, 94]

快速排序

  • 快速排序
  • 快速排序的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,递归再对分开的两部分进行排序,如此继续下去。
def quick_sort(alist,start,end):
    if start >= end:
        return 

    mid_value = alist[start]
    low = start
    high = end
    
    while low < high:
        
        while low < high and alist[high] >= mid_value:
            high -= 1
        alist[low] = alist[high]
        
        while low < high and alist[low] < mid_value:
            low += 1
        alist[high] = alist[low]
        
        
    alist[low] = mid_value
    quick_sort(alist,start,low-1)
    quick_sort(alist,low+1,end)
    
    
if __name__ == '__main__':
    alist = [12,5,18,60,12,19,98,64,52,24,9]
    quick_sort(alist,0,len(alist)-1)
    print(alist)

>>  [5, 9, 12, 12, 18, 19, 24, 52, 60, 64, 98]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值