[英]How can I implement a stable quicksort algorithm using O(n) additional space?
與一般的快速排序算法不同,我可以使用額外的數組來執行穩定的快速排序。 我知道如何隨機選擇樞軸並相應地進行分區,但我無法弄清楚如何利用附加數組使其穩定。
想到的最簡單的方法是將初始索引存儲在數組中(1、2、3 等),並在交換數據時交換它們。
然后在比較中,如果兩個元素相等,則也比較它們的索引,從而使其穩定。
正如 Blindy 和 R 所建議的,您可以只對索引進行排序,然后可以使用循環排序的變體對原始數組進行原位排序,但副作用是排序后的索引將重新排列為 0 到 n-1 . 每次移動都會放置一個元素,因此時間復雜度為 O(n)。
void reorder_according_to(int array[], size_t indices[], size_t len)
{
size_t i, j, k;
int t;
for(i = 0; i < len; i++){
if(i != indices[i]){
t = array[i];
k = i;
while(i != (j = indices[k])){
array[k] = array[j];
indices[k] = k;
k = j;
}
array[k] = t;
indices[k] = k;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.