如何将此快速排序代码更改为我想要的3个不同部分?

时间:2015-02-07 20:33:49

标签: c linked-list quicksort

对于我的作业,我的代码必须有3个源文件:

main.c(处理输入和输出,以及顶级程序逻辑。) node.h(声明数据结构和函数quicksort,它按升序对给定的双向链表进行排序)和printlist,它将链表打印到屏幕上。 node.c(定义函数quicksort和printlist,如node.h中所声明的那样。)

主函数必须使用scanf函数调用来读取keybord的输入数据(注意,输入重定向可用于直接从数据文件中读取数据)。数据的数量(在数据文件中)不是预先确定的。

这是我的导师给我的代码。我真的很困惑,我是否需要将代码分成3部分,如果是这样的话?

#include<stdio.h>
void qsort(int a[10], int first, int last);
int main() {

    int i, n, a[10], j, pivot, last, t;
    printf("enter the no of elements\n");
    scanf("%d", &n);
    printf("enter the elements\n");
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    qsort(a, 0, n - 1);
    printf("sorted elements is\n");
    for (i = 0; i < n; i++)
        printf("\n%d", a[i]);

}

void qsort(int a[10], int first, int last) {
    int i, j, t, pivot, n;
    if (first < last) {
        i = first;
        j = last;
        pivot = first;
        while (i < j) {
            while (a[i] <= a[pivot] && i < last)
                i++;
            while (a[j] > a[pivot])
                j--;
            if (i < j) {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }

        t = a[pivot];
        a[pivot] = a[j];
        a[j] = t;
        qsort(a, first, j - 1);
        qsort(a, j + 1, last);
    }
}

1 个答案:

答案 0 :(得分:1)

虽然你的教练为你提供了一个对数组进行排序的qsort,但她希望你在链表上实现它。也许这只是quicksort如何运作的一个例子?

无论如何,您可能需要将该main复制到main.c文件中。该文件需要包含node.h.在其中,您将声明列表结构,创建它们的方法,快速排序以及在屏幕上打印列表的功能。在o node.c中,您将实现在node.h上声明的所有内容。

您应该仅将定义的qsort用作参考,并且您可能需要对main进行更改,以便创建一个您编码的列表而不是数组。

这就是我对你的作业的看法,但是你应该和教练一起解决问题。