【问题标题】:mergesort algorithm归并排序算法
【发布时间】:2013-02-09 23:05:49
【问题描述】:

首先让我说这是硬件,所以我正在寻找更多的建议而不是答案。我要编写一个程序来读取输入序列,然后生成一个链接数组,以升序给出值。

输入文件的第一行是序列的长度(n),其余n行中的每一行都是一个非负整数。这 输出的第一行表示最小输入值的下标。剩余的每条输出线都是一个三元组 由下标以及相应的输入序列和链接值组成。

(在递归排序开始之前链接值不会被初始化。每个链接将在其序列值放在递归树底部的单个元素列表中时初始化为-1)

输出看起来像这样:

0  3  5
1  5  2
2  6  3
3  7  -1
4  0  6
5  4  1
6  1  7
7  2  0

其中(我认为)最后一列是下标,中心是未排序的数组,最后一列是链接值。我已经有了 mergeSort 的代码并了解它是如何工作的

【问题讨论】:

  • 链接是什么意思?
  • 不是 100%,但看起来我会有一个单独的“链接”元素数组,它们都从 -1 开始,并且在合并排序期间的某个地方,它们从原始数组中分配了一个 int。整个想法让我很困惑。
  • 这是一种非常规的数据排序方式。即使我们假设主数组的元素太大而无法移动,并且 links 允许我们将事物连接在一起,但仍不清楚链接值是如何工作的。
  • 更新了问题,希望能更清楚一点。
  • 它会以 long 的方式来展示一个 input 的示例,该示例产生了您决定向我们展示的输出。当一个点不保密时,我们可以更快地从 a 点到 b 点。

标签: c algorithm sorting


【解决方案1】:

我使用结构向量来保存每行的三个值。

主要步骤是:

  • 初始化索引并从输入中读取值
  • 按值对向量进行排序
  • 确定链接
  • 按索引对向量进行排序(返回)

这是代码的草图:

struct Element {
    int index;
    int value;
    int nextIndex; // link
}

Element V[N + 1];
int StartIndex;

V[i].index = i;
V[i].value = read_from_input;

sort(V); // by value

startIndex = V[0].index;
V[i].nextIndex = V[i + 1].index;
V[N].nextIndex = -1;

sort(V); // by index

【讨论】:

  • 感谢您的回复。我得到了大部分,但 N 应该代表什么?
  • N 是序列中的元素数减一。在您的示例中为 7。
猜你喜欢
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多