一、排序算法的时间复杂度及空间复杂度
冒泡:
平均O(N2) ,最坏O(N2) ,最好O(N) ,辅助内存O(1),稳定排序
最好情况是加了改进方法的最好:即冒泡的过程中检查是否发生了交换,如果没有发生交换,说明都排好序了,就break
插入:
平均O(N
2) ,最坏O(N
2) ,最好O(N) ,辅助内存O(1),稳定排序
直接选择排序:
平均O(N
2) ,最坏O(N
2) ,最好
O(N
2
),辅助内存
O(1),不稳定排序
快速排序:
平均O(NLogN
) ,最坏O(N
2
) ,最好
O(
NLogN
),辅助内存
O(
LogN
),不稳定排序
最坏的情况是每次选择了最大或者最小值作为比较值。最坏情况下辅助内存也为O(N)
归并排序:
平均O(NLogN
) ,最坏O(
NLogN
) ,最好
O(
NLogN
),辅助内存
O(N
),稳定排序
稳定的保证取决于比较规则为:前一班的数<=后一半的数,则先归并前一半的数
堆排序:
平均O(NLogN
) ,最坏O(
NLogN
) ,最好
O(
NLogN
),辅助内存
O(1
),不稳定排序
都用交换的情况下,快速排序辅存是
O(
LogN
),而堆排序辅存是O(1)的原因是,快速排序是logN层递归,而堆排序是在本层进行交换。
稍后附各种排序算法的代码及思路解释