undo qsort命令用来返回原始数据

时间:2013-12-15 18:55:50

标签: c arrays sorting

我在我的程序中使用qsort()对数组进行排序,以便我可以使用bsearch()来查找某个元素。

我让qsort()正确地为数组工作,因为我的数组在排序时没有填满它返回类似于此

排序之前

     a[0] = value, a[1] = value, a[2] = NULL, a[3] = NULL,

排序后     a[0] = NULL, a[1] = NULL, a[2] = value, a[3] = value,

有没有办法在排序之前撤消排序以恢复?

这是qsort()代码

`qsort(a,size_a,sizeof(*value),(int(*)(const void*,const void*)) strcmp);`

用于比较我刚才使用strcmp的值,因为所有值都是字符串。

3 个答案:

答案 0 :(得分:7)

没有。有多个原始数组将排序到相同的输出数组。你怎么知道选择哪一个?

如果你想要原版,那么你需要制作一份副本,然后对其进行排序。 (或者,创建一个指向原始元素的指针数组,然后对其进行排序。)

答案 1 :(得分:2)

虽然奥利的答案是正确的,但还是有一种解决方法。如果要排序的对象中有足够的未使用空间(例如,如果使用struct类型添加size_t类型的额外字段),则可以在排序之前将原始索引存储在数组中,然后使用此索引字段作为排序键执行第二次排序操作,以将它们按原始顺序放回。

答案 2 :(得分:1)

排序通常不是可逆变换。除了Burrows-Wheeler Transform,排序输入,或只有一个输入 - 我不认为排序是可逆的。