给定包含n个元素的整型数组a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次Partition之后的数组。每次选择所处理的子数组的第一个元素作为基准元素。
输入格式:
输入为两行,第一行为一个整数n(1<n≤1000),表示数组长度。第二行为n个空格间隔的整数,表示待排序的数组。
输出格式:
输出为若干行,每行依次输出Partition后的数组,每个元素后一个空格。
输入样例:
5
4 5 3 2 1
输出样例:
2 1 3 4 5
1 2 3 4 5
1 2 3 4 5
#include<stdio.h>
int a[1000], r;
void f(int* a, int i, int j,int v) {
int key, m, n, k,z;
int* l = a;
if (i >= j)return;
m = i;
n = j;
key = l[i];
while (m < n) {
while (l[n] >= key && m < n)n--;
while (l[m] <= key && m < n)m++;
if (m < n) {
z = l[m];
l[m] = l[n];
l[n] = z;
}
}
l[i] = l[n];
l[n] = key;
for (k = 0; k < v; k++)printf("%d ", l[k]);
printf("\n");
if(m-1>i)f(a, i, m - 1,v);
if(j>m+1)f(a, m + 1, j,v);
return;
}
int main(void) {
int i, j,k;
int a[50] = { 0 };
scanf_s("%d", &r);
for (i = 0; i < r; i++) {
scanf_s("%d", &j);
a[i] = j;
}
f(a, 0, r - 1,r);
for (k = 0; k < r; k++)printf("%d ", a[k]);
printf("\n");
return 0;
}
在pta的运行中一直显示运行时错误,或者段错误,有一个测试点还答案错误了,十分疑惑,由于给出的测试点有限,想不出来,希望能有人解惑