首先来介绍一些简单的概念:
1.稳定:如果a原本在b的前面,且a = b,排序后a仍然在b的前面
不稳定:如果a原本在b的前面,且a = b,排序后a可能出现在b的后面
2.十大经典排序算法基本可以分为两类:
非线性时间排序:通过比较来确定元素间的相对次序,时间复杂度最快为O(logN)
线性时间排序:通过创建有序的空间,将元素按照一定的规则放入有序空间,再依次取出。以空间来换取时间,可以突破O(logN)
非线性时间排序有以下几种:比较排序(冒泡排序、快速排序) 插入排序(直接插入排序、希尔排序) 选择排序(选择排序、堆排序) 归并排序(二路归并、多路归并)
线性时间排序有以下几种:计数排序、桶排序、基数排序
3.稳定的排序算法:冒泡、插入、归并、计数、桶、基数
不稳定的排序算法:选择、希尔、快速、堆
4.时间复杂度和空间复杂度:
冒泡排序:时间复杂度O(n^2),空间复杂度O(1)
选择排序:时间复杂度O(n^2),空间复杂度O(1)
插入排序:时间复杂度O(n^2),空间复杂度O(1)
希尔排序:时间复杂度O(n^1.3),空间复杂度O(1)
归并排序:时间复杂度O(nlogn),空间复杂度O(n)
快速排序:时间复杂度O(nlogn),空间复杂度O(logn)
堆排序:时间复杂度O(nlogn),空间复杂度O(1)
计数排序:时间复杂度O(n+k),空间复杂度O(k)
桶排序:时间复杂度O(n+k),空间复杂度O(k)
基数排序:时间复杂度O(n*k),空间复杂度O(n+k)
标签:归并,代码,算法,时间,空间,排序,复杂度 From: https://www.cnblogs.com/dhwcpp/p/16756580.html