2015-02-10 3 views
-1

Для следующего кода я пытаюсь реализовать Quicksort для сортировки по алфавиту векторных строк.Алфавитная quicksort Vector 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

'вы не можете сравнивать строки, как«>»или«<»' Что вам мешает? –

+0

Пожалуйста, не используйте тег 'C', если вопрос (и/или ожидаемые ответы) не равен C. Это не так. –

+2

'Любой совет?' Arr передается по значению. Используйте ссылку вместо этого, и вы можете получить некоторые отсортированные результаты. – drescherjm

ответ

2

Проблема, которую я нашел в том, что вы не можете сравнивать строки, как «>» или «<».

False. std::string обеспечивает перегрузку < и >, которые вы можете использовать для сравнения.

Проблема, с которой вы сталкиваетесь, заключается в том, что вы передаете аргумент arr по значению. Вы должны передать его по ссылке, чтобы иметь возможность изменить исходный vector вы передаёте quicksort:

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