Быстрые сортировки случайных чисел
Я хочу быстро сортировать случайно сгенерированный массив (домашнее задание). Мне дали функцию randomArray, которая генерирует случайный массив. Однако я не получаю правильных результатов. Кто-нибудь может указать, что не так с моим кодом?
Может быть проблема с указателями в моем коде. Я не очень хорошо понимаю, почему (данная) функция randomArray принимает переменную-указатель.
#ifndef UTIL_H
#define UTIL_H
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#define MIN 0
#define MAX 100000
void quicksort(double *a[], int n)
{
if (n <= 1) return;
double *p = a[n/2];
double *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];
}
void
randomArray (double *array, int length)
{
int i ;
for (i = 0; i < length; i++)
{
array[i] =
(double) (rand () /
(((double) RAND_MAX + 1) / (double) (MAX - MIN + 1))) + MIN;
}
}
int main(void) {
int i;
/* das Array zum Sortieren */
double test_array[9];
randomArray(test_array, 9);
quicksort(test_array, 9);
for(i = 0; i < 9; i++)
printf("%f ", test_array[i]);
printf("\n");
return 0;
}
1 ответ
Вы размещаете массив в основной функции:
double test_array[9];
При передаче массива в функцию
randomArray(test_array, 9);
Распадается на указатель, поэтому вам также необходимо передать его длину:
randomArray (double *array, int length)