C 具有双*值的快速排序

C 具有双*值的快速排序,c,double,quicksort,C,Double,Quicksort,我得到了一个C语言的程序,它在具有int值的数组上实现快速排序。我需要将其转换为一个程序,该程序将在具有双*值的数组上实现快速排序。我认为我只需要将“int”声明更改为“double*”,但由于某种原因,当我使用除整数以外的其他值测试数组时,程序不再工作 有人能帮忙吗?我对C语言编程几乎一无所知,也不知道该怎么做。以下是“int”计划: void quicksort(int a[], int n) { if (n <= 1) return; int p = a[n/2];

我得到了一个C语言的程序,它在具有int值的数组上实现快速排序。我需要将其转换为一个程序,该程序将在具有双*值的数组上实现快速排序。我认为我只需要将“int”声明更改为“double*”,但由于某种原因,当我使用除整数以外的其他值测试数组时,程序不再工作

有人能帮忙吗?我对C语言编程几乎一无所知,也不知道该怎么做。以下是“int”计划:

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;
}
void快速排序(int a[],int n)
{

如果(n当您使用
双指针替换
int
s时,您需要更改比较-将指向的值与指针进行比较,而不是指针本身。

无效快速排序(双a[],int n){
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]; }


int main(void) {
    int i;
    /* das Array zum Sortieren */
    double test_array[] = { 5.1, 2.0, 7.8, 9.5, 6.0, 4.7, 3.6, 8.7, 1.1 };
    int N = sizeof(test_array)/sizeof(double);

    for(i = 0; i < N; i++)
        printf("%f ", test_array[i]);
    printf("\n");


    quicksort(test_array,  N);

    for(i = 0; i < N; i++)
        printf("%f ", test_array[i]);
    printf("\n");

    return 0; }

if(n如果不是家庭作业,只需使用stdlib中的
qsort()
。如果是家庭作业,您的快速排序算法要比需要的复杂得多。但是我推荐您使用单个数组和长度作为参数。大多数初始实现甚至都没有做到这一点(您的仍处于关闭状态,但至少付出了努力).Fyi,您不需要
b[]
c[]
这样做。@WhozCraig我不太关心复杂性。问题是我在概念上不太明白要让程序为double*工作必须做些什么。这不仅仅是一件复杂的事情。这是一件比较的事情。但是如果你发布了被破坏的
double
版本,那将非常有帮助,因为在您的问题和标题中,您提到将
int
更改为
double*
(注意,
*
就像指向double的指针一样),但在您的问题的一个地方,您说“我想我只需要将“int”声明更改为“double”…”那是哪一个呢?你是在排序
double
还是
double*
,如果是后者,你确定你想这样做吗?@WhozCraig它确实是“double*”。这就是我的家庭作业问题告诉我要做的。我知道我听起来一定很无知,但我不知道什么是“指针”和“指针”我知道我听起来一定很无知,但我不知道什么是“指针”和“尖头”我的意思是。我需要在里面放一些星号吗?@Balerion_the_black重新阅读你的问题,并澄清它。你是在排序一个
double
数组还是一个
double*
数组。这是一个不同的世界。@WhozCraig.double*@WhozCraig是的……我真的不理解这个差异。