python实现常用排序算法(冒泡、插入、选择、希尔和快排)

最近在学习算法时,了解到了一些关于排序的算法实现,在这里我整理了一下,并用python实现,具体实现请看下面代码:

(一)、冒泡排序算法

def pop_sort(alist)
    i = 0
    while i < len(a) - 1:
        count = 0
        for j in range(len(alist) - 1 - i):
            if alist[j] > alist[j + 1]:
                alist[j], alist[j + 1] = alist[j + 1], alist[j]
                count += 1
        if count == 0:
            break
        i += 1

(二)、插入排序

def insert_sort(mylist):
    if len(mylist) <= 2:
        return mylist

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

(三)、选择排序

def choose_sort(aList):
    for i in range(len(aList)):
        a_min = i
        for j in range(i, len(aList)):
            if aList[j] < aList[a_min]:
                a_min = j
        if i != a_min:
            aList[i], aList[a_min] = aList[a_min], aList[i]

(四)、希尔排序

def shell_sort(alist):
    n = len(alist)
    gap = n // 2
    while gap >= 1:
        for i in range(gap, n):
            j = i
            while (j - gap) >= 0:
                if alist[j] < alist[j - gap]:
                    alist[j], alist[j - gap] = alist[j - gap], alist[j]
                    j -= gap
                else:
                    break
        gap //= 2

(五)快排

def quick_sort(alist, start, end):
    if start >= end:
        return
    mid = alist[alist[start]]
    left = start
    right = end
    while left < right:
        while left < right and alist[right] >= mid:
            right -= 1
        alist[left] = alist[right]
        while left < right and alist[left] <= mid:
            left += 1
        alist[right] = alist[left]
    alist[left] = mid

    quick_sort(alist, start, left - 1)
    quick_sort(alist, right+1, end)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值