2015-09-10 69 views
4

我只是試圖在字符串上實現Quicksort,但它不起作用。輸出與輸入相同,而不是已排序的字符串。我檢查了很多次,但無法找到任何錯誤。請幫助我。QuickSort程序不工作

下面是快速排序功能。

void quicksort(string str1, int si, int ei) 
{ 
    if (si < ei) 
    { 
     int pi = partition(str1, si, ei); 
     quicksort(str1, si, pi-1); 
     quicksort(str1, pi+1, ei); 
    } 
} 

分區功能。

int partition(string str2, int si, int ei) 
{ 
    int i = si-1; 
    char x = str2[ei]; 
    int j; 
    for (j = si ; j <= ei-1 ; j++) 
    { 
     if (str2[j] <= x) 
     { 
      i++; 
      exchange(&str2[i], &str2[j]); 
     } 
    } 
    exchange(&str2[ei], &str2[i+1]); 
    return i+1; 
} 

和交換功能。

void exchange(char *a, char *b) 
{ 
    char temp; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 

主要功能如下。

int main() 
{ 
    int l1; 
    string str; 
    cout << "Enter the string to be sorted"; 
    cin >> str; 
    l1 = str.length(); 
    quicksort(str, 0, l1-1); 
    cout << str; 
    return 0; 
} 
+0

倒引號是行內代碼格式化。在每行的開始處使用4個空格代碼塊(加上額外的空格用於進一步縮進)。 – crashmstr

+2

你爲這些功能寫了什麼測試? –

+0

我要求用戶輸入字符串並且沒有硬編碼測試用例。我嘗試輸入字符串,如「dbca」,「adbc」,甚至數字,如「1243」@AlanStokes – Sarthak

回答

5

quicksort的值取str1,它然後循環地將其子問題。每個實例都在單獨的無關字符串上運行,並對其本地副本進行修改。

你需要按引用傳遞str

void quicksort(string& str1, int si, int ei) 

而同爲partition

int partition(string& str2, int si, int ei) 
+0

它工作。過去兩天,我厭倦了分析我的代碼,我從未注意到這件事。非常感謝你@Barry – Sarthak