您的位置:首页 > 其它

算法学习(五)----基本排序算法总结

2016-10-09 19:10 302 查看
前几天学习几个基本的排序算法,下面来总结一下

算法分类



在维基百科上有排序算法的一张图,红线是我之前总结学习的。

从我们学习的排序算法中可以分为两类:简单排序有冒泡、选择、插入排序;改进算法有希尔、堆排序、归并排序和快速排序。

快速排序是冒泡的升级版,属于交换排序;希尔排序是直接插入排序的升级,属于插入排序类;堆排序相当于简单选择排序的升级,属于选择排序类。

算法动态图解

我自己做了几张这几种排序算法的动态图,以加深理解。原始图是从http://zh.visualgo.net 上截取的,我做成了动态的。

1.冒泡排序



2.简单选择排序



3.直接插入排序



4.归并排序



5.堆排序



6.快速排序



稳定性

算法稳定性是指相等键值的纪录维持相对次序。比如在序列中1、2号位置的元素具有相等的值,在排序前,1在2的前面,在排序后,1是否还在2的前面?尽管这是2个相等值的元素。稳定是指1、2的相对顺序不会发生变化,否则就是不稳定的算法。

从前面几个算法可以知道,稳定的排序算法有:冒泡、选择、插入、归并排序,而希尔、堆排序和快速排序都是不稳定的算法。

算法复杂度比较

冒泡排序(bubble sort)— O(n2)

插入排序(insertion sort)—O(n2)

归并排序(merge sort)—O(n log n);需要O(n)额外空间

选择排序(selection sort)—O(n2)

希尔排序(shell sort)—O(n log2 n)如果使用最佳的现在版本

堆排序(heap sort)—O(n log n)

快速排序(quick sort)—O(n log n)期望时间,O(n2)最坏情况;对于大的、随机数列表一般相信是已知最快的排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: