常见面试题-排序算法-归并排序
2020-04-20 19:12
871 查看
排序思想:
- 将待排序序列从中间一分为二,对左右两边再进行递归分割操作,得到n个相互独立的子序列;
- 对n个独立的子序列递归的执行合并操作,最终得到有序的序列。
特点:
- 稳定性:在合并的时候,如果两个数相等,可以将前面的数先放到辅助数组中,所以归并排序是稳定的。
- 时间复杂度:每次合并操作的时间复杂度是O(N),而二叉树的深度是log2N,所以总的时间复杂度是O(N*lgN)。
python实现:
[code]def merge(left, right): l = 0 r = 0 m = [] while l < len(left) and r < len(right): if left[l] <= right[r]: m.append(left[l]) l += 1 else: m.append(right[r]) r += 1 remains = right[r:] if l == len(left) else left[l:] m.extend(remains) return m def merge_sort(arr): if len(arr) <= 1: return arr middle = len(arr) // 2 left = merge_sort(arr[:middle]) right = merge_sort(arr[middle:]) return merge(left, right) if __name__ == "__main__": arr = [1, 4, 2, 1, 5, 7, 98, 33, 1, 32, 2, 4, 6, 8] print(merge_sort(arr))
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【算法之常用排序算法(二)】常用排序算法性能比较,及常见面试题
- 常见的五类排序算法图解和实现(归并类:二路归并排序)
- 转【算法之常用排序算法(二)】常用排序算法性能比较,及常见面试题
- 常见的排序算法示例(3)-归并排序、堆排序
- 常见排序算法(归并排序-曾经的笔记)
- 常见排序算法导读(9)[归并排序]
- 常见的五类排序算法图解和实现(归并类:二路归并排序)
- 几种常见的排序算法,选择排序,冒泡排序,希尔排序,堆排序,快速排序,归并排序,基数排序的比较
- 常见的排序算法(四)( 归并排序,计数排序 , 基数排序)
- 常见排序算法总结分析之选择排序与归并排序-C#实现
- 常见面试题排序算法(二)
- 常见面试题-排序算法-冒泡排序
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 常见的排序算法(四)( 归并排序,计数排序 , 基数排序)
- 常见的三种排序算法(堆排、快排、归并排序)的比较总结
- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 知识点11:常见的排序算法–归并排序
- 常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 【常见排序算法】以最简单的方式理解归并排序
- 常见排序算法:归并排序