![](/img/trans.png)
[英]How do I change iterative quicksort with fixed pivot to iterative quicksort with random pivot?
[英]how can I change this quicksort code into 3 different parts that I want to?
对于我的任务,我的代码必须具有3个源文件:
main.c(处理输入和输出以及顶级程序逻辑。)node.h(声明数据结构和功能quicksort,该函数对给定的双向链表以升序进行排序)和printlist,其打印出链接列表到屏幕。 node.c(定义函数quicksort和printlist,如在node.h中声明的那样。)
main函数必须使用scanf函数调用从keybord读取输入数据(请注意,输入重定向可用于直接从数据文件读取数据)。 数据数量(在数据文件中)是不确定的。
这是我的老师给我的代码。 我真的很困惑,我需要将代码分为三部分吗?
#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);
}
}
尽管您的讲师给您提供了对数组进行排序的qsort,但她希望您在链接列表上实现它。 也许这只是quicksort如何工作的一个示例?
无论如何,您可能需要将该main复制到main.c文件中。 该文件将需要包含node.h。 在其中,您将声明列表结构,创建它们的方法,快速排序以及在屏幕上打印列表的函数。 在node.c内,您将实现在node.h上声明的所有内容。
您应该仅将定义的qsort用作参考,并且可能需要对main进行更改,以便它创建您编码的列表而不是数组。
这就是我对您的作业的看法,但是您可能应该与您的老师一起清理一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.