一种分块+归并思想的排序算法
  • 板块学术版
  • 楼主oddy
  • 当前回复119
  • 已保存回复119
  • 发布时间2023/1/6 10:18
  • 上次更新2023/10/24 05:25:31
查看原帖
一种分块+归并思想的排序算法
470348
oddy楼主2023/1/6 10:18

我想到了一个复杂度还行的排序算法,运用了分块、归并思想。

算法流程如下:

  1. 输入数组 a1..na_{1..n}
  2. 把数组分成 n\sqrt n 个块,每个块 n\sqrt n 个数。
  3. 对每个块进行平方级复杂度的简单排序。
  4. 运用类似归并的思想,重复 nn 次,遍历 n\sqrt n 个块的头部,取出最小值放进答案数组。

复杂度分析:

  • 输入:O(n)O(n) 的。
  • 对每个块进行简单排序:因为简单排序是平方级的,有 n\sqrt n 个块,每个块 n\sqrt n 个数,所以这一步的复杂度是 O(n(n)2)=O(nn)O(\sqrt n\cdot(\sqrt n)^2)=O(n\sqrt n)
  • 归并:考虑到最坏情况下,n\sqrt n 个块都要被遍历 nn 次,这一步的复杂度为 O(nn)O(n\sqrt n)

故总的复杂度为 O(nn)O(n\sqrt n)

在我看来,这个算法有如下优点:

  • 复杂度不算太高。在如今 CCF 少爷机、打开 -O2 编译开关的大背景下跑得过去。
  • 实现简单。简单排序、归并的实现都不难。
  • 排序稳定。有很多稳定的简单排序,归并的过程也是稳定的。

各位怎么评价这个算法?它还可以有怎样的优化?

2023/1/6 10:18
加载中...