数据结构与算法学习--排序总结

排序算法已经学习完了,但是在项目开发过程中如果去选择一个高效的排序算法;下面是对前面几种算法的总结。
在这里插入图片描述
如何实现一个通用的、高效率的排序函数
线性排序算法(计数、桶、计数排序)的时间复杂度比较低,但是适用的场景也比较特殊。如果针对小规模的数据进行排序,可以选择时间复杂度0(n^2)的算法;如果针对大规模的排序,时间复杂度0(nlogn)的算法更加高效。所以为了兼顾任意规模数据的排序,一般都会首选时间复杂度时0(nlogn)的排序算法来实现。
0(nlogn)的排序算法有归并和快排,后面还有一个堆排序(特殊二叉树)。因为归并排序不是原地排序,所以在数据量比较大的场景无法适用。所以一般都会选用快速排序。
如何优化快速排序
在最坏情况下快速排序的时间复杂度是O(n^2),原因是因为在一个有序度比较高的,分区点选择不够合理,适用快排的时间复杂度就会退化。最理想的分区点:被分区点分开的两个分区中,数据的数量差不多。下面介绍2中比较常用分区算法:
1、三数取平均 (分别取首、中、尾),取中间数值作为分区点。
2、随机法。
标准C函数库qsort()函数实现可以参照:https://blog.csdn.net/w5320/article/details/21987179
https://www.felix021.com/blog/read.php?1951

猜你喜欢

转载自blog.csdn.net/jsh13417/article/details/83586160