簡體   English   中英

在動態數組上實現自己的快速排序

[英]Implementing own quicksort on dynamic array

我必須在動態字符串數組上實現自己的排序,例如這樣的數組是:

string * sortArray;

然后,我從一個文本文件中讀取數組的大小,並根據需要制作數組並填充它。 所以我有...

sortArray = new string[_numberOfNames];

for(int i = 0; i < _numberOfNames; ++i){
    sin >> _data[i];
}

現在,我需要創建自己的排序方法,並且我認為我應該使用quicksort。 我的問題是,我不確定該怎么做。

當選擇樞軸時,該如何設置兩個更多的動態字符串數組以將較低的值和較高的值放入其中,然后遞歸呢? 在開始將值放入數組之前,無法事先知道每個數組需要多大。

我以為我可以做一些事情,例如將每個數組的大小定義為與要排序的數組相同,然后再如何從末尾刪除任何不需要的空白空間,但是我不確定這是可能的嗎?

任何幫助將非常感激。

PS我知道std :: sort,我已經在程序中有這個,我只是想自己實現一個排序。

上面的評論有兩個選擇:

1.)使用std :: vector。 在那里您可以擁有可變大小的數組。

2.)使用快速排序的“就地”版本在原始數組中進行排序。 參見http://en.wikipedia.org/wiki/Quicksort#In-place_version

假設您的數組大小為N
並且您的樞軸值是x

您應該做的就是這樣,有兩個指針,一個指向開始(0),一個指向結束(N-1)。 他們都應該移到中間。 當起始指針值大於x而結束指針值小於x切換它們的值。 在完成並將x放置在他的新位置(兩個指針相遇的位置)之后,遞歸地繼續執行從xxx的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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