对于我的作业,我的代码必须有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);
}
}
答案 0 :(得分:1)
虽然你的教练为你提供了一个对数组进行排序的qsort,但她希望你在链表上实现它。也许这只是quicksort如何运作的一个例子?
无论如何,您可能需要将该main复制到main.c文件中。该文件需要包含node.h.在其中,您将声明列表结构,创建它们的方法,快速排序以及在屏幕上打印列表的功能。在o node.c中,您将实现在node.h上声明的所有内容。
您应该仅将定义的qsort用作参考,并且您可能需要对main进行更改,以便创建一个您编码的列表而不是数组。
这就是我对你的作业的看法,但是你应该和教练一起解决问题。