2013-12-15 74 views
1

我在我的程序中使用qsort()排序数组,因此我可以使用bsearch()来查找某个元素。撤回qsort返回原始数据

我有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,

之后有一种方法可以在排序前撤消排序

这是比较我只是用strcmp,因为所有的值是字符串的值qsort()代码

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

+3

如果您需要,您必须复印。 –

+2

将'(int(*)(const void *,const void *))strcmp'传递给'qsort()'是错误的。 – 2013-12-15 18:57:09

回答

7

不。有多个原始数组可以排序到同一个输出数组。你怎么知道选择哪一个?

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

1

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

2

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