Мне дана программа на C, которая реализует Quicksort на массивах со значениями int. Мне нужно преобразовать его в программу, которая будет реализовывать Quicksort на массивах с двойными значениями *. Я думал, что мне просто нужно изменить объявления «int» на «double *», но по какой-то причине программа больше не работает, когда я тестирую массивы с другими значениями, чем целые.Quicksort with double * values
Может кто-нибудь помочь? Я действительно почти ничего не знаю о программировании на C и не знаю, как это сделать. Вот программа «ИНТ»:
void quicksort(int a[], int n)
{
if (n <= 1) return;
int p = a[n/2];
int b[n], c[n];
int i, j = 0, k = 0;
for (i=0; i < n; i++) {
if (i == n/2) continue;
if (a[i] <= p) b[j++] = a[i];
else c[k++] = a[i];
}
quicksort(b,j);
quicksort(c,k);
for (i=0; i<j; i++) a[i] =b[i];
a[j] = p;
for (i= 0; i<k; i++) a[j+1+i] =c[i];
}
int main(void) {
int i;
/* das Array zum Sortieren */
int test_array[] = { 5, 2, 7, 9, 6, 4, 3, 8, 1 };
int N = sizeof(test_array)/sizeof(int);
quicksort(test_array, N);
for(i = 0; i < N; i++)
printf("%d ", test_array[i]);
printf("\n");
return 0;
}
Если не домашнее задание, просто используйте 'QSort()' от STDLIB. –
Это домашнее задание. –
И если это домашнее задание, ваш быстрый алгоритм сортировки * более сложный, чем он должен быть. Но я рекомендую вам использовать один массив и длину для параметров. Большинство начинающих реализаций даже не делают этого правильно (ваш все еще выключен, но усилия были там, по крайней мере). Fyi, вам не нужно 'b []' или 'c []' делать это вообще. – WhozCraig