У меня есть программа быстрой сортировки, которая отлично работает, пока я не попытаюсь отсортировать массив с повторяющимся числом. Программа застревает в бесконечном цикле. Я считаю, что это происходит в блоке кода While(lower < upper)
.
void quickSort(int array[], int size){
if(size < 2) return;
int pivot, lower, upper, temp;
//Set the indeces for the first and last elements
lower = 0;
upper = size - 1;
//Select pivot element randomly
pivot = array[rand() % (size)];
while(lower < upper){
//Lower must be a number < than pivot and upper a number >= pivot
while(array[lower] < pivot){
lower++;
}
while(array[upper] > pivot){
upper--;
}
//Swap upper and lower
temp = array[lower];
array[lower] = array[upper];
array[upper] = temp;
}
//Repeat the past actions on the two partitions of the array recursively
quickSort(array, lower);
quickSort(&array[lower+1], size-lower-1);
}
while
никогда не приведут к встречеlower
иupper
. Один должен быть< pivot
, а другой>= pivot
. - person Joe Z   schedule 03.12.2013