多线程排序的思想_基础算法中的排序算法归纳

本文介绍了四种高效的多线程排序算法:快速排序、归并排序、堆排序和基数排序。快速排序采用分治法,时间复杂度为O(n log n)。归并排序同样基于分治,适用于大规模数据。堆排序利用堆结构,通过调整堆来排序。基数排序按位进行比较,适合处理位数不同的数值。文章还简述了外排序的场景和优化策略。
摘要由CSDN通过智能技术生成

70a1aff8af4624b51b677a0abf9a25ae.png

排序算法是最为常用的基础算法之一。排序是数值计算基础,本节将着重于高效的内排序算法。分治法作为排序中较为重要的思想,核心在于“分而治之,各个击破”。

一般情况下的思想是通过两两比较进行排序,实际产品环境中采用两两比较虽然理论上可以解决现实问题,但是实际上却不会采用两两比较的方式,因此本节中将会介绍性能较高的排序算法,也是实际中用得最多的方式。


一、快速排序

快速排序(Quick Sort)采用分治法的思想,把一个数值序列划分为两个子序列,然后对两个子序列再进行分治法的思想。计算过程如下:

  1. 从数值队列中选择一个基准元素。
  2. 将队列中的其它元素与基准元素比较,比基准元素小的元素放在基准元素的左边,比基准元素大的元素放在右边(降序排列则相反),则队列被基准元素划分为左右两个区间。
  3. 对两个区间的值,分别递归步骤2,使得最终形成有序的序列。

虽然上述步骤采用的是递归的方式,但是当区间小于等于1时,将会直接返回,因此不会无限制递归下去。例如对于队列数值“4 3 6 2 5”采用快速排序进行升序排列过程如下图所示。

054fb9d08bcfc5b26497dcf2d4a6eb0e.png

如上图所示,以数值“4”为基准,将比其小的元素“3”、“2”放置到左边,比其大的元素“6”、“5”放置到右边,形成以4为基准的左区间和右区间,然后对左区间和右区间分别再次选择出基准元素,重复上述过程,最终得到数值序列“2 3 4 5 6”。

  • 时间复杂度。最坏的时间复杂度
    equation?tex=O%28n%5E%7B2%7D%29 ,最优的时间复杂度
    equation?tex=O%28nlogn%29 ,平均时间复杂度
    equation?tex=O%28nlogn%29
  • 空间复杂度。快速排序的空间复杂度相对而言依然与具体的实现有关。

二、归并排序

归并排序(Merge Sort)是指将两个已经有序的序列合并成一个有序序列的排序方式。归并排序可以采用迭代的方式进行排序,例如有两组数值序列A、B,采用归并排序进行升序排序,则排序步骤如下所示:

  1. 申请存放最终合并后的数值序列存放空间,空间大小为数值序列A、B的空间之和。
  2. 初始化两个指针,分别指向数值序列A、B的首元素地址。
  3. 比较两个指针对应的值,将较小的值放入到最终存放空间,并移动较小值指针到序列的下一位。
  4. 重复上一个步骤,直到某一个指针已经指到序列的队尾,已经没有元素和另外一个序列进行比较。
  5. 将另外一个序列的剩余元素直接拷贝到最终序列存放空间的末尾。

采用的两组数值序列A、B,可以采用递归的思想

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值