簡體   English   中英

如何使用 O(n) 額外空間實現穩定的快速排序算法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM