【问题标题】:Quicksort-ing random numbers快速排序随机数
【发布时间】:2013-11-22 15:37:15
【问题描述】:

我想快速排序一个随机生成的数组(作业)。我得到了一个生成随机数组的函数“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;
}

【问题讨论】:

  • void quicksort(double *a[], int n) 应该是 void quicksort(double *a, int n),假设您的算法是正确的。您正在传递一个衰减为指针的数组。您现在拥有的声明是指向指针的指针。

标签: c pointers quicksort


【解决方案1】:

你在主函数中分配一个数组:

double test_array[9];

将数组传递给函数时

randomArray(test_array,  9);

它衰减为一个指针,这就是为什么你还需要传递它的长度:

randomArray (double *array, int length)

【讨论】:

  • 我认为这不是问题,因为数组已正确传递给快速排序函数
  • 我什至认为这不能解决问题。
  • @jwodder “我不太明白为什么(给定的)“randomArray”函数需要一个指针变量。“这不是问题吗?
  • 我认为 Lucas 的意思是为了 quicksort 函数而不是 randomArray 函数。
  • 他明确询问了randomArray 函数。我想如果他明白为什么要这样声明,他也会明白如何声明快速排序函数。
猜你喜欢
  • 2013-01-29
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2021-03-29
  • 2021-07-27
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多