空间复杂度:
O(1):插入排序,选择排序,冒泡排序,堆排序,希尔排序
O(logn-n):快速排序
O(n):归并排序
O(m):桶排序(m为桶大小)
时间复杂度:
时间复杂度为O(N)的算法:计数排序和基数排序
不基于比较的排序算法
不适用于所有的情况,需要确定范围大小
时间复杂度为O(N2)的算法:
冒泡排序,选择排序:与初始数据序列无关
插入排序:插入排序过程与原始数据顺序有关,每次移动不超过K时,时间复杂度不超过O(N*K);
时间复杂度为O(n*logN)
快速排序:与初始数据序列无关
归并排序:与初始数据序列无关
例题:在一个几乎拍好序的数据中,如何快速排序,每个需要变动的排序在K之内
方案:使用改进后的堆排序,每次排序建立一个大小为K的小根堆将堆顶最小数据弹出,每次时间logk,一共K次,总时间为N*logK;
哈希表的实现:时间复杂度:O(N),空间复杂度:O(N);
稳定性:
稳定排序:插入排序,冒泡排序,归并排序,计数排序,基数排序,桶排序
不稳定排序:选择排序,快速排序,希尔排序,堆排序。