2015-02-10 59 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)