c - 使用 double* 值进行快速排序

标签 c double quicksort

我得到一个用 C 语言编写的程序,它在具有 int 值的数组上实现快速排序。我需要将它转换成一个程序,该程序将在具有 double* 值的数组上实现快速排序。我以为我只需要将“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;
}

最佳答案

当您将 int 替换为 double 指针时,您需要更改比较 - 比较指向的值,而不是指针本身。

关于c - 使用 double* 值进行快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894206/

相关文章:

c - 段错误(核心转储)

c - 如何在 C 中每 t 秒运行一次?

c++ - 从输入中获取数字和单位作为 double 和字符串——编程 : Principles and Practices Using C++

string - Swift – 带逗号分隔符的字符串加倍

c - 在 c 中评估表达式以便用 double 值写入

algorithm - 归并排序究竟进行了多少次比较?

scala - Scala 中的惰性快速排序

c - 分段故障链表

c# - 我的程序快速排序不起作用

C 程序打印字符串的相同地址,C 程序的意外输出