排序算法优化求教
  • 板块学术版
  • 楼主Milky_Cat
  • 当前回复21
  • 已保存回复21
  • 发布时间2023/1/6 09:32
  • 上次更新2023/10/24 05:25:53
查看原帖
排序算法优化求教
906320
Milky_Cat楼主2023/1/6 09:32

对于这篇讨论这篇讨论所提及的排序,是否可以用双端队列的思想优化?

具体优化方案为:

1.仍用二维vector数组 qq 与两个数组 headheadtailtail,一个变量 pp 进行队列模拟,初始时,headheadtailtail 的元素和 pp 全部设为0。另设一个数组 ff 进行双端队列的标记。

2.输入元素。输入 a[i]a[i] 时,若 a[i]=a[i1]a[i] = a[i-1],直接入队,tail[p]tail[p]+1tail[p] \leftarrow tail[p]+1

3.输入 a[i]a[i] 时,若 a[i]>a[i1]a[i]>a[i-1],则判断 f[p]f[p] 是否为 00,若是,直接入队,tail[p]tail[p]+1tail[p] \leftarrow tail[p]+1。若否,新建一个队列,pp+1p \leftarrow p+1tail[p]=1tail[p]=1(这里 pp 取自增后的 pp,下同)。

4.输入 a[i]a[i] 时,若 a[i]<a[i1]a[i]<a[i-1],判断几种情况:

(1).f[p]=1f[p]=1,直接入队,tail[p]tail[p]+1tail[p] \leftarrow tail[p]+1

(2).f[p]=0f[p]=0,但是 tail[p]=1tail[p]=1,直接入队,tail[p]tail[p]+1tail[p] \leftarrow tail[p]+1f[p]=1f[p]=1

(3).f[p]=0f[p]=0,且 tail[p]=0tail[p]=0,新建一个队列,pp+1p \leftarrow p+1tail[p]=1tail[p]=1

5.输入完成后,开始排序。定义变量 mnmn 记录最小值,若当前队列的 head>tailhead>tail 则直接跳过,否则,若 f[i]=0f[i]=0mnmnhead[i]head[i] 比较,否则与 tail[i]tail[i] 比较,若当前元素小于 mnmnmn=imn=i

6.比较出 mnmn 后,若 f[mn]=0f[mn]=0,输出 q[mn][head[mn]]q[mn][head[mn]]head[mn]head[mn]+1head[mn] \leftarrow head[mn] +1。否则,输出 q[mn][tail[mn]]q[mn][tail[mn]]tail[mn]tail[mn]1tail[mn] \leftarrow tail[mn] -1

运用这种思想能否进行时间复杂度优化?

2023/1/6 09:32
加载中...