【发布时间】:2013-01-29 21:36:09
【问题描述】:
我正在尝试执行合并排序而不实际重新排列数组。让我解释得更好一点。假设我有一个数组:
3
5
6
7
0
4
1
2
例如,如果 5(当前位于索引 1)移动到索引 6,我需要我的程序记住最初存储 5 的位置的索引。我怎样才能记住原来的索引?
【问题讨论】:
-
您有什么想问的吗?
-
在这种情况下,您可以获取数组的副本并对其进行排序:)。
我正在尝试执行合并排序而不实际重新排列数组。让我解释得更好一点。假设我有一个数组:
3
5
6
7
0
4
1
2
例如,如果 5(当前位于索引 1)移动到索引 6,我需要我的程序记住最初存储 5 的位置的索引。我怎样才能记住原来的索引?
【问题讨论】:
您可以做的是为每个元素使用一个结构,并为这些结构对象创建一个数组。例如-
typedef struct
{
int val;
int index;
}element;
循环遍历数组,val字段填入值,另一个填入原始位置。
排序时,您在 val 字段上进行比较,并保持 index 不变。所以现在有了原来的位置,数组也可以排序了。
【讨论】:
创建一个指向原始数组的并行指针数组。对指针进行排序,而不是对原件进行排序。您的索引位置保持不变,您现在有了一个排序后的数组“视图”。
【讨论】: