Saya memiliki program quicksort yang berfungsi dengan baik sampai saya mencoba mengurutkan array yang memiliki nomor berulang. Program ini terjebak dalam putaran tak terbatas. Saya yakin ini terjadi di blok kode 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
yang paling dalam tidak akan pernah menyebabkanlower
danupper
bertemu. Yang satu harus< pivot
dan yang lainnya>= pivot
. - person Joe Z   schedule 03.12.2013