Ниже простого быстрого кода сортировки с последним элементом в виде сводной таблицы почти работает, но кроме последнего элемента не удается отсортировать. Любые мысли, когда эта программа пошла не так?Программа quicksort предоставляет частично отсортированный вывод
Вот результат:
$a.out
4 3 5 2 1 3 2 3 //input
1 2 2 3 3 3 5 4 //output
Простая замена выглядит тонкой
void swap (int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
Hmm..fine слишком ..may вопрос с end
?
int partition(int a[],int start,int end){
int pivot = a[end];
int pindex=start;int i;
for (i=start; i <= end-1; i++){
if (a[i] <= pivot){
swap(&a[i],&a[pindex]);pindex++;
}
}
swap(&a[pindex],&a[pivot]);
return (pindex + 1);
}
Несомненно хорошо выглядит.
void quicksort(int a[],int start,int end){
int pindex;
if (start < end){
pindex = partition(a,start,end-1);
quicksort(a,start,pindex-1);
quicksort(a,pindex+1,end);
}
}
Простой главный вызов
int main(){
int a[8] = {4, 3, 5, 2, 1, 3, 2, 3};
int i=0;
for(i=0;i<8;i++)
printf(" %d", a[i]);
quicksort(a,0,8);
printf("\n");
for(i=0;i<8;i++)
printf(" %d", a[i]);
}
Вы пробовали работает ваш код через autoindenter? Одно дело в том, что он иногда обнаруживает нежелательные операторы управления потоком, а другое дело в том, что он делает ваш вопрос здесь читабельным. –
Спасибо за подсказку, запустите его через autoindenter, вот после :) – wewmi