我正在尝试执行mergesort而不实际重新排列数组。让我解释一下。说我有一个数组:
3
5
6
7
0
4
1
2
如果5(当前在索引1)被移动到索引6,例如我需要我的程序来记住最初存储5的索引。我怎么能记住原始索引?
答案 0 :(得分:2)
创建指向原始数组的并行指针数组。对指针进行排序,而不是原件。您的索引位置保持不变,现在您已经排序了"视图"数组。
答案 1 :(得分:1)
您可以做的是为每个元素使用一个结构,并创建这些结构对象的数组。例如 -
typedef struct
{
int val;
int index;
}element;
循环遍历数组,使用值填充 val 字段,使用原始位置填充另一个字段。
排序时,您在 val 字段上进行比较,并保持索引不变。所以现在你有原始位置,数组也可以排序。