void qkSort (int *arr,int size)
{
if (size>1)
{
int p = partition(arr,size);
qkSort(arr,p);
qkSort(arr+p+1,size-(p-1));
}
return;
}
int partition(int *arr,int size)
{
int i,j,pivot,temp;
pivot = size-1;
for(i=0,j=-1;i<size-1;++i)
{
if (arr[i]<arr[pivot])
{
++j;
if(i!=j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
temp = arr[pivot];
arr[pivot] = arr[j+1];
arr[j+1] = temp;
pivot = j+1;
return pivot;
}
Программа зависает. Мониторинг переменных с помощью gdb показывает, что второй рекурсивный вызов не передаёт его аргумент правильно. Пожалуйста помоги! Заранее спасибо!реализация quicksort в c
У вас есть объявление для 'partition', видимое из' qkSort', где вы его называете? Если нет, ваш компилятор должен был предупредить вас; сверните свои уровни предупреждения. В этом конкретном случае это не должно вызывать каких-либо видимых проблем, но вы всегда должны иметь * видимый прототип для любой функции, которую вы вызываете. –
@Keith Thompson Я использовал несколько файлов. Объявления присутствуют в отдельном заголовке. – user2751812