Я полный новичок для stackoverflow, и это мой первый пост. Пожалуйста, простите, если это не правильное место для публикации этих запросов. Я написал код для алгоритма Quicksort
, основанный на алгоритме, указанном в курсе «Алгоритмы» в Coursera (однако это не для каких-либо назначений).Реализация Quicksort в C с использованием первого элемента в качестве точки опоры
В принципе, существуют две функции Quicksort
, которые называются рекурсивно и перегородкой() функция, которая возвращает указатель поворота. Каждый раз я выбираю стержень как первый элемент массива. Я проверил функцию partition() и отлично работает, но массив не сортируется даже после вызова функции Quicksort()
.
Любая помощь приветствуется. Благодарю.
#include <stdio.h>
void swap(int *p, int i, int j)
{
int temp = *(p+i);
*(p+i) = *(p+j);
*(p+j) = temp;
}
int partition(int *q, int l, int r)
{
int i = l+1, j;
int p = l;
int len = r-l +1;
for (j = l+1; j < len; j++)
{
/*printf("%d \n", j);*/
if (*(q+j) < *(q+p))
{
swap(q, i, j);
i += 1;
}
}
swap(q, l, i-1);
/*printf("%d", i-1);*/
return (i-1);
}
void quicksort(int *ptr, int low, int high)
{
if (low < high)
{
int p = partition(ptr, low, high);
printf("%d\n", p);
quicksort(ptr, low, p);
quicksort(ptr, p+1, high);
}
}
int main(){
int i;
int a[] = {3, 8, 2, 5, 1, 4, 7, 6};
int len = sizeof(a)/sizeof(a[0]);
for (i = 0; i < len; ++i)
{
printf("%d ", a[i]);
}
printf("\n");
int *ptr = a;
quicksort(ptr, 0, len-1);
for (i = 0; i < sizeof(a)/sizeof(a[0]); ++i)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
В моем последнем посте я разделяю C++ примера, не считает его, C, я делюсь ссылкой, прочитать: http://www.cquestions.com/2008/01/ c-program-for-quick-sort.html – devpro
'for (j = l + 1; j