排序算法复杂度比较

231 阅读1分钟
算法时间复杂度空间复杂度
快速排序最优O(nlgn) 最差O(n²)最差O(n)最优O(lgn)
堆排序O(nlgn)O(1)
归并排序O(nlgn)O(n)用来将两个排好序的数组合并
选择排序O(n²) 每次都要遍历一遍没有最优O(1)
插入排序最优 O(n) 数组已经排序
最差 O(n²) 逆序排序
O(1)
冒泡排序最优 O(n) 数组已经排序
最差 O(n²) 逆序排序
O(1)

快排虽然最差是O(n²),但平均还是O(nlgn) 其中堆排序,快速排序,选择排序是不稳定的算法,相等元素的相对位置会发生改变。 选择排序,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了

快速排序,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱

快排的空间复杂度取决于递归栈的层数,如果每次找到的主元位置很偏,将问题分解成 1 n-1的子问题,那栈的层数是n,就是o(n),最好的情况每次在中间平分数组,分解为 n/2 n/2的问题,栈层数是logn,空间复杂度是o(logn)