#include <stdio.h> #include<stdlib.h> void input(int *&a,int & n); void output(int *a,int n); void swap(int &a, int &b); int Partition(int a[],int low,int high); void QuickSort(int a[],int s,int t); int n; int main () { int i; int *a = NULL; input (a,n); QuickSort(a, 0, n-1) ; free(a); return 0; } void input(int *&a,int & n) { int i; scanf("%d",&n); if((a=(int *) malloc ((n)*sizeof(int)))==NULL) { printf("不能成功分配内存单元\n"); exit(0); } for(i=0;i<n;i++) { scanf("%d",&a[i]); } } void output(int *a,int n) { int i; for(i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); } void swap(int &a, int &b) { int t; t=a;a=b;b=t; } /**********定义Partition() 和 QuickSort()函数**********/ /********** Begin **********/ int Partition(int a[], int low, int high) { int pivot = a[low]; while (low < high) { while (low < high && a[high] >= pivot) { high--; } a[low] = a[high]; while (low < high && a[low] <= pivot) { low++; } a[high] = a[low]; } a[low] = pivot; return low; } void QuickSort(int a[], int s, int t) { if (s < t) { int pos = Partition(a, s, t); QuickSort(a, s, pos - 1); QuickSort(a, pos + 1, t); } } /********** End **********/输出每次划分后数组的值
时间: 2023-08-28 13:16:31 浏览: 261
很好,下面是代码实现:
```
void PrintPartition(int a[], int low, int high) {
for (int i = low; i <= high; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
void QuickSort(int a[], int s, int t) {
if (s < t) {
int pos = Partition(a, s, t);
PrintPartition(a, s, t); // 打印每次划分后的数组值
QuickSort(a, s, pos - 1);
QuickSort(a, pos + 1, t);
}
}
```
在`QuickSort`函数中加入了`PrintPartition`函数,在每次划分后打印数组的值。
相关问题
#include <stdio.h> #include<stdlib.h> void input(int *&a,int & n); void output(int *a,int n); void comp(int *a, int n) ; void swap(int &a, int &b); int main () { int i,n; int *a = NULL; input (a,n); comp(a, n) ; output(a,n); free(a); return 0; } /**********定义函数**********/ /********** Begin **********/ /********** End **********/
这段代码是一个简单的排序程序,使用了选择排序算法。以下是对各个函数的解释:
1. `void input(int *&a,int & n)`:这个函数是输入函数,用于输入数组a和数组长度n。
2. `void output(int *a,int n)`:这个函数是输出函数,用于输出排好序的数组a。
3. `void comp(int *a, int n)`:这个函数是排序函数,用于对数组a进行排序。
4. `void swap(int &a, int &b)`:这个函数用于交换两个变量a和b的值。
在主函数中,先通过input函数输入数组a和数组长度n,然后调用comp函数对数组a进行排序,最后输出排好序的数组a。最后使用free函数释放动态分配的内存。
#include <stdio.h> #include<stdlib.h> #include<time.h> //下面两个函数与第一关第二关的功能相同 void input(int *&a,
#include <stdio.h> 是C语言中的头文件之一,它包含了一些输入输出相关的函数。例如,printf() 和 scanf() 这两个常用函数就包含在这个头文件中。
#include<stdlib.h> 是C语言中的头文件之一,它包含了一些与内存分配、进程控制以及其他实用函数相关的内容。例如,malloc() 和 free() 就是两个常用的内存分配函数。
#include<time.h> 是C语言中的头文件之一,它包含了一些关于时间和日期操作的函数。例如,time() 函数就可以获取当前的系统时间。
函数 input(int *&a, ...) 的具体实现我无法确定,因为缺少完整的代码。但是,从函数名 input() 可以猜测这是一个用于输入数据的函数。
至于第一关和第二关,我并不清楚具体指的是哪些内容,请提供更详细的信息。我会尽力回答您的问题。
阅读全文