你知道多少排序算法?
  TEZNKK3IfmPf 2024年04月12日 21 0

你知道有哪些排序算法?还记得是怎么实现的吗?

冒泡排序

原理:相邻的2个数进行比较。每次经过一趟比较,最大数或者最小数就会被交换到最后一位。
时间复杂度:如果是按照从小到大的顺序进行排序,只需要把前n-1个大的数归为到后面的n-1位即可,所以外层循环只需要到len-1。冒泡排序的最坏情况就是把顺序变为逆序,把逆序变为顺序。时间复杂度O(n^2)

选择排序

原理:在要排序的一组数中,选出最小的数与第一个数交换,然后再在剩下的数中选出最小的数与第二个数交换….直到第n-1个数与第n个数比较为止

插入排序

原理:不断向一个已经排好序的数列中按顺序插入数据,最终当最后一个数插入完以后,得到的就是我们需要的有序数列了

希尔排序(插入排序的一种更高效的改进版本)

原理:初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率

二分排序

原理:在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left<right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上

快速排序(又称分区交换排序,简称快排)

原理:

  • 挑选基准值:从数列中挑出一个元素,称为“基准”(pivot)
  • 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成
  • 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
归并排序

原理:
1)划分问题:把序列分成元素个数尽量相等的两半
2)递归求解:把两半元素分别排序
3)合并问题:把两个有序表合并成一个。(每次只需要把两个序列的最小元素加以比较,删除其中的较小元素并加入合并后的新表)

基数排序

原理:以整形为例,将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程:

(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如64,个位为4,则放入4号桶中);

(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中;

(3)重复(1)(2)过程,从个位到最高位(比如32位无符号整型最大数4294967296,最高位为第10位)。基数排序的方式可以采用LSD(Least Significant Digital)或MSD(Most Significant Digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。

计数排序

原理:计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。

由于篇幅的原因,这里就不罗列详细的实现方案了。我为大家准备了c语言实现版本, 查看详情。

知识点我为大家准备了脑图,查看下方图片查看。

你知道多少排序算法?

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年04月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月19日   13   0   0 typescript数组编译器
TEZNKK3IfmPf