7种经典排序算法及实现

栏目: 编程工具 · 发布时间: 5年前

内容简介:昨天面试被问到了快排,这里正好将排序系统过一遍。排序是入门技术面试一个永恒的主题,记得去年问某大牛想招什么样的技术人员时,笑眯眯答曰“如果一个人连个sort都写不出来,那我也不会想是吧。” 囧…网上介绍排序的文章非常多,本文的目的是提供一个最快速且全面的入门教程,仅仅阅读本文,你就可以串联起主要排序算法中需要把握的点和具体的代码实现(基于Python)。

昨天面试被问到了快排,这里正好将 排序 系统过一遍。

简介

排序是入门技术面试一个永恒的主题,记得去年问某大牛想招什么样的技术人员时,笑眯眯答曰“如果一个人连个sort都写不出来,那我也不会想是吧。” 囧…

网上介绍排序的文章非常多,本文的目的是提供一个最快速且全面的入门教程,仅仅阅读本文,你就可以串联起主要 排序算法 中需要把握的点和具体的代码实现(基于Python)。

动机

排序是所有算法的基础,根据《算法》[1] 中的描述 — “we often use sorting algorithms as a starting point to solve other problems.” ,虽然已经有不少sort接口可以直接调用,但排序作为一个完整的故事,是我们充分理解算法比较的一个最佳实践,同时从面试的角度来说,也是经常提及的问题,这是每个 程序员 应该把握的基本功。

经典排序算法介绍

请先看完如下可视化视频,可以初步理解各个排序在做什么(2倍速绝对酸爽,减压必备良方)。

15种排序算法比较(来源:Youtube).

下面逐一介绍:

1.冒泡排序(Bubble Sort)

冒泡排序的思想是两两比较相邻记录的值,如果反序即交换,这样最小的记录犹如气泡一般浮”水面“,故称为冒泡排序。时间复杂度而言,在最好情况下,即正序有序,只需要比较n次。故,为O(n) ,最坏情况下,即逆序有序,需要比较(n-1)+(n-2)+… …+1,故,为O(n²)。

2.选择排序(Selection Sort)

选择排序每次都从序列中找到最小的元素,置于数组起始位置,以此类推,直到所有元素排序完毕。其运行时间和输入无关,同时数据移动是最少的,时间复杂度为O(n²)。

3.插入排序(Insertion Sort)

插入排序重复执行插入操作,类似扑克牌整理,排序过程中将每一张牌插入到其他已经有序的牌中的适当位置,该排序对于“部分有序”的数组十分高效,其时间复杂度为O(n²)。

4.希尔排序 (Shell Sort)

希尔排序是插入排序的改进版,首先使数组中任意间隔以h的元素都是有序的,之后递减步长,直至整个序列有序。希尔排序权衡了子数组的规模和有效性,其效率很大程度上取决于步长的选取,根据[1]的描述 — “Shell sort is the only sorting method we consider whose performance on randomly ordered arrays has not been precisely characterized.”

5.归并排序 (Merge Sort)

归并排序采用分治思想,其思想是将序列(递归地)分成两半分别排序,之后将结果归并起来,属于分治法(Divide and Conquer)的应用,其时间复杂度是 O(nlogn)。

6.快速排序 (Quicksort)

快速排序可能是被问得最多的排序了,其也是一种分治算法,原理是先选定“标兵”(pivot),然后将序列中比标兵大的数排右测,比标兵小的数排左侧,此步骤称为分割(partition),递归调用,直至排序完成。其平均情况下的时间复杂度是 O(nlogn)。

7.堆排序 (Heapsort)

堆排序通过构造堆来进行排序过程,其排序过程分为:1)堆的构造 和 2)下沉排序 两步,其时间复杂度是 O(nlogn),由于要构造堆,因此不适用于序列个数较少的情况。

上述7种排序的代码实现如下(基于Python):

https://github.com/KrisCheng/HackerProblem/blob/master/Python/12_Sort/Sort.ipynb

参考及扩展

[1] 算法(第四版)

[2] 九种排序算法的可视化及比较

[3] 各大排序算法的Wiki页面

3 total views, 3 views today


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

区块链革命

区块链革命

[加]唐塔普斯科特(Don Tapscott)、[加]亚力克斯·塔普斯科特(Alex Tapscott) / 中信出版集团股份有限公司 / 2016-9 / 69

(1)国际大腕“数字经济之父”继畅销书《维基经济学》之后再出力作! (2)一本真正全景式描述区块链理论及应用的巨著! (3)苹果共同创始人史蒂夫·沃兹尼亚克、世界经济论坛创始人和论坛主席克劳斯·施瓦布、网景及硅谷安德森·霍洛维茨风险投资公司创始人马克·安德森、麦肯锡董事长兼全球总裁鲍达民、 百事公司首席执行官卢英德、丹·舒尔曼 Paypal公司首席执行官等全球政治界、学术界和商界精英联......一起来看看 《区块链革命》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试