2013-12-15 72 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類型的附加字段),則可以在排序它們之前將原始索引存儲在數組中,然後使用此操作執行第二次排序操作索引字段作爲排序關鍵字,將它們按原始順序放回。