Python 十大排序算法

lst = [4, 3, 6, 9, 2, 1]

1、冒泡排序: 依次把最大的数字往后移动

def bubble_sort(lst):
    for i in range(len(lst) - 1):
        for j in range(len(lst) - 1 - i):
            if lst[j + 1] < lst[j]:
                lst[j + 1], lst[j] = lst[j], lst[j + 1]
    return lst

print(bubble_sort(lst))

2、选择排序: 把最小的元素放到最前面

def select_sort(lst):
    for i in range(len(lst) - 1):
        minindex = i
        for j in range(i + 1, len(lst)):
            if lst[j] < lst[minindex]:
                minindex = j
        lst[i], lst[minindex] = lst[minindex], lst[i]

    return lst

print(select_sort(lst))

3、 插入排序:把需要插入的数字插入到已经排好序的正确位置,插入的时候只需要比较插入元素之前的值。

def insert_sort(lst):
    for i in range(len(lst) - 1):
        cur, preindex = lst[i + 1], i
        while preindex >= 0 and cur < lst[preindex]:
            lst[preindex + 1] = lst[preindex]
            preindex -= 1
        lst[preindex + 1] = cur
    return lst

print(insert_sort(lst))

4、希尔排序:一种更高效的插入排序,它与插入排序的不同之处在于,它会优先比较距离较远的元素。

def shell_sort(lst):
    l = len(lst)
    gap = 1
    while gap < l // 3:
        gap = gap * 3 + 1
    while gap > 0:
        for i in range(gap, len(lst)):
            cur, preindex = lst[i], i - gap
            while preindex >= 0 and cur < lst[preindex]:
                lst[preindex + gap] = lst[preindex]
                preindex -= gap
            lst[preindex + gap] = cur
        gap //= 3
    return lst

print(shell_sort(lst))

5、计数排序:开辟一个新的空间,然后把它的数组值当做键,数组中的元素为该值出现的次数。

def counter_sort(lst):
    bucket = [0] * (max(lst) + 1)
    for l in lst:
        bucket[l] += 1
    i = 0
    for j in range(len(bucket)):
        while bucket[j] > 0:
            bucket[j] -= 1
            lst[i] = j
            i += 1
    return lst

print(counter_sort(lst))

6、 快速排序:取一个中心点,把比它大的放一边,小的放另一边
 

def quick_sort(lst):
    if len(lst) <= 1:
        return lst
    p = lst[0]
    left = [lst[i] for i in range(1, len(lst)) if lst[i] < p]
    right = [lst[i] for i in range(1, len(lst)) if lst[i] >= p]
    return quick_sort(left) + [p] + quick_sort(right)

print(quick_sort(lst))

7、 归并排序:将数组平均分为两份,然后各自排序,然后合并到一个新的数组中。

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

    def merge(left, right):
        res = []
        i = j = 0
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                res.append(left[i])
                i += 1
            else:
                res.append(right[j])
                j += 1
        return res + left[i:] + right[j:]

    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)

print(merge_sort(lst))

8、二分查找:取数组中间的值和查找的值作比较,从而判断需要查找的元素在中间值的哪个方位。

def binary_search(lst,left,right, num):
    if right <left:
        return -1
    mid = (left + right) // 2
    if lst[mid] < num:
        left = mid + 1
    elif lst[mid] > num:
        right = mid - 1
    else:
        return mid
    return binary_search(lst,left,right,num)

print(binary_search(lst, 1,len(lst),11))

参考:Python实现十大经典排序算法 - 简书

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值