对排序算法的一些思考和总结

本文探讨了排序算法的不同类别,包括插入排序中的直接插入和希尔排序,选择排序中的简单选择和堆排序,以及归并排序。详细阐述了每种排序算法的工作原理、时间复杂度和稳定性,并提出了优化策略,如快速排序中的枢值选取和交换操作改进。
摘要由CSDN通过智能技术生成

一味的好高骛远是不行的,在学习了一些框架之后,我又重新返回了基础知识的学习,今天想讲的就是数据结构中的排序算法。接下来我将以排序的类型进行总结(概括性)。

插入排序类

直接插入排序

将记录插入到一个已经排好序的有序列表中,从而得到一个新的、记录+1的有序列表。

通过赋值方式来取代交换,最优情况(序列本身有序)下时间复杂度能达到O(n),减少了性能上的损耗,属于稳定排序。

希尔排序

作为直接插入排序的升级,采用跳跃分割策略,以“增量”为间隔的子序列内使用直接插入排序。直到最后的增量值为一。

相应的,由于跳跃式记录,该排序方法并不稳定。

选择排序类

简单选择排序

该算法相当于使用一个暂存变量来保存待排序队列中的最小值,尽可能的把交换次数减小。但是不论好坏情况,他的比较次数都是一样多的。。。

推排序

通过完全二叉树的性质,将待排序数组看成一个二叉树(也可以是顶堆),规定根节点一定是最大或者是最小的值。通过构造堆,每一次将堆顶和末尾元组互换并且“弹出”,随后重新在剩余的序列中构造堆。

在算法中分为构造堆和交换首尾元素再构造两部分,在堆构造的时候,通过二叉树性质,我们可以在遍历的时候使用*2代替+1.在时间上快了很多。最优和最坏的情况下都达到了O(nlogn),缺点可能就是复杂的堆结构以及不稳定

归并类排序

归并排序

我理解成等空间换时间的排序算法,最优和最坏的情况下同样都达到了O(nlogn),使用了递归,并且在排序时是两两比较的,不存在跳跃,所以也是稳定的算法

交换类排序

快速排序

通过一趟排序将序列分为两部分——一部分的数值都小于枢值,另一部分都大于枢值。

算法通过两端交替比较对换来得到枢值,接着对两部分递归进行排序。

但是该算法仍然存在很大的优化空间。

首先就是优化枢值选取,因为快排实际上也是跳跃进行的,那么我们可以形象地把它的递归过程想象成一个二叉树,尽量将枢纽值作为中间节点,所以我们选取的枢纽值就不能太大或者太小,我们可以使用三数取中的方法确保枢纽值尽可能的合理。

然后就是将交换变成赋值操作,每一次比较之后的交换变成赋值。

最后就是减少递归的次数,可采用尾递归方式,每一个只递归小数部分。

                        平均时间、最优、最坏、空间、稳定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值