算法学习(五)----基本排序算法总结
2016-10-09 19:10
302 查看
前几天学习几个基本的排序算法,下面来总结一下
在维基百科上有排序算法的一张图,红线是我之前总结学习的。
从我们学习的排序算法中可以分为两类:简单排序有冒泡、选择、插入排序;改进算法有希尔、堆排序、归并排序和快速排序。
快速排序是冒泡的升级版,属于交换排序;希尔排序是直接插入排序的升级,属于插入排序类;堆排序相当于简单选择排序的升级,属于选择排序类。
1.冒泡排序
2.简单选择排序
3.直接插入排序
4.归并排序
5.堆排序
6.快速排序
从前面几个算法可以知道,稳定的排序算法有:冒泡、选择、插入、归并排序,而希尔、堆排序和快速排序都是不稳定的算法。
插入排序(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)最坏情况;对于大的、随机数列表一般相信是已知最快的排序
算法分类
在维基百科上有排序算法的一张图,红线是我之前总结学习的。
从我们学习的排序算法中可以分为两类:简单排序有冒泡、选择、插入排序;改进算法有希尔、堆排序、归并排序和快速排序。
快速排序是冒泡的升级版,属于交换排序;希尔排序是直接插入排序的升级,属于插入排序类;堆排序相当于简单选择排序的升级,属于选择排序类。
算法动态图解
我自己做了几张这几种排序算法的动态图,以加深理解。原始图是从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)最坏情况;对于大的、随机数列表一般相信是已知最快的排序
相关文章推荐
- 算法基本知识学习之排序算法
- 《算法导论》学习总结 — XX.第22章 图的基本算法
- 算法学习入门之使用C语言实现各大基本的排序算法
- 机器学习实战-基本算法总结2
- 算法基础:基本排序算法原理、实现与总结
- 【算法学习】浅谈排序算法
- 算法导论学习笔记-第二十二章-图的基本算法
- ACM基本算法分类、推荐学习资料和配套poj习题
- 算法导论之排序算法学习
- nginx学习总结三(nginx的基本配置)
- Cisco 基本操作注意事项、学习要点及其总结
- J2SE学习总结——基本语言学习完成之后的两个方向
- 今天来总结一下在学习java一些重要内容(基本)
- 【笔记】【算法学习】【动态规划】背包问题总结(1)
- 常用算法总结之排序(二)----基本冒泡
- 算法分析之分治法学习总结(一)
- Linux学习总结—进程切换和调度算法深入分析
- [翻译]C#数据结构与算法 – 第三章基本排序算法