2015-02-10 58 views
-1

對於下面的代碼,我一直試圖實現Quicksort以按字母順序排序矢量字符串。按字母順序排列的矢量C++

我發現的問題是,您無法將字符串比作「>」或「<」。我也嘗試使用字符串的.compare函數。

有什麼建議嗎?

`void quicksort(vector<string> arr, int left, int right) 
{ 
    int i = left, j = right; 
    string tmp; 
    string pivot = arr[(left + right)/2]; 

    /* partition */ 
    while (i <= j) { 
     while (arr[i] < pivot) 
       i++; 
     while (arr[j] > pivot) 
       j--; 
     if (i <= j) { 
       tmp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = tmp; 
       i++; 
       j--; 
    } 
} 
/* recursion */ 
if (left < j) 
    quickSort(arr, left, j); 
if (i < right) 
     quickSort(arr, i, right); 
}` 

我也會以後可嘗試歸併,並InsertSort

+1

'你不能比較的字符串爲「>」或「<」'是什麼阻止你? – 2015-02-10 15:01:46

+0

請不要使用'C'標籤,除非問題(和/或預期答案)是C.這不是。 – 2015-02-10 15:01:50

+2

'任何建議?'arr是按價值傳遞的。使用參考,而你可能會得到一些排序結果.. – drescherjm 2015-02-10 15:04:29

回答

2

我發現的問題是,你不能比較的字符串爲「>」或「<」。

假。 std::string提供了可用於比較的超載<>

您遇到的問題是您按值傳遞arr參數。你應該按引用傳遞它能夠修改你傳遞給quicksortvector

void quicksort(vector<string>& arr, int left, int right)