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) 反复合并,即一次将两个子列表合并在一起,生成新的已排序子列表,直到所有元素都完全合并到一个已排序的数组中。
面试刷题必看!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个步骤分别应用于元素的每个子数组,这些元素的值比上一个轴的值小或大。
面试刷题必看!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)