#include "stdio.h" #include "stdlib.h" void quicksort(int left,int right) { int i, j, n, c, temp; i = left; j = right; temp = a[left]; while(i < j) { while(a[j] > temp && i < j){ j--; } while (a[i] < temp && i > j) { i++; } if (i!= j) { c = a[i]; a[i] = a[j]; a[j] = c; } } a[left] = a[i]; a[i] = temp; quicksort(left, i-1); quicksort(i+1, right); } int main() { int i, j, n, a[10]; scanf("%d", &n); for(i = 1; i <= n; i++) scanf("%d", &a[i]); void quicksort(1, n); for(i = 1; i <= n; i++) printf("%d", a[i]); getchar(); getchar(); return 0; }这段代码有问题吗
时间: 2023-06-15 14:07:53 浏览: 80
这段代码有几个问题:
1. 第一行和第二行的头文件包含应该写在两行中间,否则会报错。
2. 在函数 quicksort 中,第 11 行应该是 `while (i <= j)` 而不是 `while (i > j)`。
3. 在主函数中,第 9 行的 `void quicksort(1, n);` 应该改为 `quicksort(1, n);`,因为 `void quicksort(1, n);` 表示定义了一个无返回值、有两个参数的函数,但没有调用这个函数。
4. 在主函数中,第 11 行应该在输出数字后加上一个空格,否则输出结果会连成一串。
下面是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
void quicksort(int left, int right) {
int i, j, c, temp;
i = left;
j = right;
temp = a[left];
while (i < j) {
while (a[j] > temp && i < j) {
j--;
}
while (a[i] < temp && i <= j) {
i++;
}
if (i != j) {
c = a[i];
a[i] = a[j];
a[j] = c;
}
}
a[left] = a[i];
a[i] = temp;
if (left < i - 1) {
quicksort(left, i - 1);
}
if (i + 1 < right) {
quicksort(i + 1, right);
}
}
int main() {
int i, n, a[10];
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
quicksort(1, n);
for (i = 1; i <= n; i++) {
printf("%d ", a[i]);
}
getchar();
getchar();
return 0;
}
```
阅读全文