python算法题排序_面试刷题必看!Python中的5大排序算法及其实现代码

pos = i                while pos > 0 and arr[pos - 1] > cursor:            # 交换列表中的数字            arr[pos] = arr[pos - 1]            pos = pos - 1        # 中断并进行最终交换        arr[pos] = cursor    return arr4.合并排序

合并排序是一个完美的分而治之的算法例子。使用这种算法只需要通过以下两个主要步骤:

(1) 连续分割未排序的列表,直到有N个子列表,其中每个子列表都有1个“未排序”的元素,N是原始数组中的元素数。 (2) 反复合并,即一次将两个子列表合并在一起,生成新的已排序子列表,直到所有元素都完全合并到一个已排序的数组中。

a3318c941136e31422f9e0be7c9e8802.gif

面试刷题必看!Python中的5大排序算法及其实现代码-5.jpg (337.36 KB, 下载次数: 0)

2020-12-27 00:33 上传

def merge_sort(arr):    # 对最后一个数组进行拆分    if len(arr) <= 1:        return arr    mid = len(arr) // 2    # 在两个部分上递归执行merge_sort    left, right = merge_sort(arr[:mid]), merge_sort(arr[mid:])    # 合并在一起    return merge(left, right, arr.copy())def merge(left, right, merged):    left_cursor, right_cursor = 0, 0    while left_cursor < len(left) and right_cursor < len(right):              # 将每一个排序并放入结果        if left[left_cursor] <= right[right_cursor]:            merged[left_cursor+right_cursor]=left[left_cursor]            left_cursor += 1        else:            merged[left_cursor + right_cursor] = right[right_cursor]            right_cursor += 1                for left_cursor in range(left_cursor, len(left)):        merged[left_cursor + right_cursor] = left[left_cursor]            for right_cursor in range(right_cursor, len(right)):        merged[left_cursor + right_cursor] = right[right_cursor]    return merged5.快速排序

快速排序也是一种分而治之的算法,与合并排序一样。尽管它有点复杂,但在大多数标准实现中,它的执行速度比合并排序快得多,而且很少达到O(n²)的最坏情况复杂度。它有三个主要步骤:

(1) 我们首先从数组中选择一个元素,称之为pivot。 (2) 将小于轴的所有元素移到轴的左侧;将大于轴的所有元素移到轴的右侧。这称为分区操作。 (3) 递归地将上述2个步骤分别应用于元素的每个子数组,这些元素的值比上一个轴的值小或大。

a3318c941136e31422f9e0be7c9e8802.gif

面试刷题必看!Python中的5大排序算法及其实现代码-6.jpg (224.8 KB, 下载次数: 0)

2020-12-27 00:33 上传

def partition(array, begin, end):    pivot_idx = begin    for i in xrange(begin+1, end+1):        if array<= array[begin]:            pivot_idx += 1            array, array[pivot_idx] = array[pivot_idx], arrayarray[pivot_idx], array[begin] = array[begin], array[pivot_idx]    return pivot_idxdef quick_sort_recursion(array, begin, end):    if begin >= end:        return    pivot_idx = partition(array, begin, end)    quick_sort_recursion(array, begin, pivot_idx-1)    quick_sort_recursion(array, pivot_idx+1, end)def quick_sort(array, begin=0, end=None):    if end is None:        end = len(array) - 1        return quick_sort_recursion(array, begin, end)

--END--

很多同学在学习 Python 时,都会遇到各种各样的算法问题,有些很容易就能搞懂,但是有些就需要一些时间精力来学习。

本文中的5种排序算法比较适合 Python 新手,大多数老程序员对排序算法已经炉火纯青了,都是在面试过程中,被迫学习的。

喜欢本文的同学记得收藏+点赞~

更多内容,欢迎大家关注我们的公众号:为AI呐喊(weainahan)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值