【发布时间】:2016-04-24 04:26:11
【问题描述】:
我正在开发一个函数,它可以获取一个数组并对其进行排序而不会丢失原始索引,例如:
originalArray[5] = {9, 2, 3, 4, 15};
// code
// ..
结果:
sortedArr[5] = {2, 3, 4, 9, 15};
index[5] = {1, 2, 3, 0, 4};
注意如何
/*
index[0] == 1 because sortedArr[0] == originalArr[1]
index[3] == 0 because sortedArr[3] == originalArr[0]
index[4] == 4 because sortedArr[4] == originalArr[4]
*/
等等,关键是保存数字的索引,以便我可以在另一个函数中使用它们。在示例中,我制作了两个数组(已排序和原始),它应该与我制作的数组相同,只是为了解释我的观点。时间复杂度应限制在 O(n*log(n))。 n 表示数组的大小,(最大为 100)。
它的推荐(老师为我们推荐)使用签名的功能
void rem_sort(int array[], int index[], int size)
。 编辑:所以每个人都在问我到目前为止我尝试了什么,如果这有助于你帮助我,我很抱歉我没有先提到它,无论如何这是我到目前为止尝试过的,首先我尝试对数组我成功了,但我丢失了原始数组的索引,这不是我的意思,所以我想如果我创建一个新的“临时”数组并将我的原始数组复制到它并以这种方式排序我不会影响我的原始数组但我无法正确获取索引(具有这种复杂性),我考虑过使用指针,但我不知道该怎么做,所以我被卡住了!
感谢您的帮助!
【问题讨论】:
-
请展示您的研究成果。请先阅读How to Ask页面。
-
使用一个
struct数组来保存数据和原始索引。排序后,原始索引仍然是已知的。 -
用数字 0..n 初始化
index数组,在这个数组上使用mergesort或qsort和一个排序函数,通过index数组间接比较,做一个最后一次将排序后的值存储到sortedArr。 -
好的,那么到目前为止你做了什么?