几种排序算法的描述总结

算法总结

概述

包含冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序的描述概括

冒泡排序

两个两个进行比较和调换位置,最坏需要n轮。优势就是可以在序列已经有序的时候,可以提前停止(这种改进后的算法称为短冒泡),时间复杂度O( n 2 n^2 n2)。
Alt

选择排序

每次遍历选择最大值,依次放在合适的位置上。时间复杂度仍然是O( n 2 n^2 n2),但是因为减少了交换次数,通常是比冒泡排序更快的。
在这里插入图片描述

插入排序

在列表的较低端维护一个有序的子列表,一次将元素插入到列表中合适的位置。(具体实现:将待排序的元素拿出来,然后维护的列表元素依次往后挪,知道待插入的元素找到合适位置,插入)
在这里插入图片描述

希尔排序

在最终的插入排序之前增加预处理:以i为步长的多个序列内先进行插入排序,然后再将这些序列合并在一起,进行插入排序。时间复杂度在O( n n n)~O( n 2 n^2 n2),这取决于步长的选择。
在这里插入图片描述

归并排序

采用分治的策略,将一个序列最终划分为由1个元素组成的多个序列,然后再合并起来(在合并的过程中进行排序),时间复杂度O( n l o g n nlogn nlogn),缺点就是需要占用空间来保存序列片段,以空间换时间了,可能会溢出。
在这里插入图片描述

快速排序

思想:采用一个基准值,大于这个基准值的就放在前面,小于它的就放在它后面。然后再对前面和后面的序列分别再次使用快速排序……(分治)。优点:不需要额外的空间。时间复杂度理想的时候:O( n l o g n nlogn nlogn),最差的情况:O( n 2 n^2 n2),发生在分割点偏向一端。通常采用三数取中的方法来试图避免,即在选择基数的时候,分别考虑列表的头元素、中间元素、尾元素,选取中间值作为基准值。
实现:通过一个leftmark指针,和rightmark指针,leftmark指针从前往后移动,rightmark从右往前移动,如果排序的结果希望是从小到大,则要保证最终基准值前面的元素都小于它、后面的比它大,那么leftmark遇到比基准值大的值就停下来,rightmark遇到比基准值小的也停下来指向它,然后这两个值交换位置,就实现了基准值前面的元素都比他小、后面的都比他大的目的。直到这两个指针相邻为止,然后将基准值的元素放到这里(可以和rightmark的元素互换即可,让最后一步的时候rightmark已经<leftmark了),然后再将前半部分和后半部分分别快速排序操作。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值