C++实现排序算法的总结

快速排序

冒泡排序

插入排序

希尔排序

选择排序

堆排序

索引最大堆

归并排序

外部归并排序

桶排序

十大排序动画参考链接:https://www.cnblogs.com/onepixel/articles/7674659.html


 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。

非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

C++实现排序算法的总结_第1张图片


 稳定:插入,冒泡、归并

C++实现排序算法的总结_第2张图片

 


 

C++实现排序算法的总结_第3张图片

插入排序,在已经有序的元素中排序,则时间复杂度可以达到O(n),所以每个排序,面对不同的数据,可能会有不一样的时间复杂度,我们能够给出的就是,平均时间复杂度

总体而言,快速相对来说是比较快的排序算法

原地排序:直接可以在数组上完成排序,不需要再另外开辟空间,所以一些系统对空间相对敏感,则不适合归并排序

快速排序也是原地排序,但是它是利用递归实现,每次递归都需要占用栈空间,所以额外空间为O(logn),归并排序其实也是递归实现,它的额外空间应该是O(n+logn)但是logn 相对n来说可以忽略不计

对于快速排序的稳定性,首先需要随机选择基准点,很有可能将一批中相等的元素选到了前面,而堆排序,在组建堆的时候,很可能被打乱。

不稳定的排序算法也可以通过自定义函数,使得排序算法稳定(比如重载<比较符)

C++实现排序算法的总结_第4张图片

你可能感兴趣的:(algorithm)