将原始索引存储在数组中

时间:2013-02-14 06:13:06

标签: c arrays merge

我正在尝试执行mergesort而不实际重新排列数组。让我解释一下。说我有一个数组:

3
5
6
7
0
4
1
2

如果5(当前在索引1)被移动到索引6,例如我需要我的程序来记住最初存储5的索引。我怎么能记住原始索引?

2 个答案:

答案 0 :(得分:2)

创建指向原始数组的并行指针数组。对指针进行排序,而不是原件。您的索引位置保持不变,现在您已经排序了"视图"数组。

答案 1 :(得分:1)

您可以做的是为每个元素使用一个结构,并创建这些结构对象的数组。例如 -

typedef struct
{
  int val;
  int index;
}element;

循环遍历数组,使用值填充 val 字段,使用原始位置填充另一个字段。

排序时,您在 val 字段上进行比较,并保持索引不变。所以现在你有原始位置,数组也可以排序。