2013-11-10 3 views
0

Я хочу, чтобы Quicksort случайно сгенерированный массив (домашнее задание). Мне дана функция «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

'void quicksort (double * a [], int n) 'должно быть' void quicksort (double * a, int n) ', предполагая, что ваш алгоритм верен. Вы передаете массив, который распадается на указатель. Объявление, которое у вас есть, предназначено для указателя на указатель. – Justin

ответ

0

Вы выделяете массив в главной функции:

double test_array[9]; 

При передаче массива в функцию

randomArray(test_array, 9); 

Он распадается на указатель, поэтому вы также должны пройти его длина:

randomArray (double *array, int length) 
+1

Я не думаю, что это проблема, так как массив правильно передается функции быстрой сортировки –

+0

Я даже не думаю, что это решает вопрос. – jwodder

+0

@jwodder «Я не очень хорошо понимаю, почему функция« randomArray »(данная) принимает переменную-указатель». Это не вопрос? – Lucas

Смежные вопросы