你的代码存在几个问题,导致运行不正常。以下是一些关键问题和修正建议:
1. **数组声明问题**:
- `int arr;` 声明应该是一个数组,例如 `int arr[num];`。
2. **函数参数问题**:
- `int sort_arr(int arr, int L, int R)` 中的 `arr` 应为指针形式 `int *arr`。
3. **基准点选择问题**:
- `int pivot = arr;` 应该是 `int pivot = arr[a];`。
4. **输入输出问题**:
- 你在填充数组时,只填充了一个元素。
5. **访问数组元素问题**:
- 排序过程中比较和交换数组元素时,访问方式需要修改为 `arr[i]` 和 `arr[j]`。
以下是修改后的代码:
#include <stdio.h>
int sort_arr(int *arr, int L, int R)
{
int i = L;
int j = R;
int a = (L + R) / 2;
int temp;
int pivot = arr[a];
while (i <= j)
{
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (L < j)
{
sort_arr(arr, L, j);
}
if (i < R)
{
sort_arr(arr, i, R);
}
return 0;
}
int main()
{
int num;
printf("要输入的整数个数:");
scanf("%d", &num);
int arr[num];
for (int i = 0; i < num; i++)
{
printf("请输入第%d个数字:", i + 1);
scanf("%d", &arr[i]);
}
printf("排序前:\n");
for (int i = 0; i < num; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
sort_arr(arr, 0, num - 1);
printf("排序后:\n");
for (int i = 0; i < num; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
上述代码修正了所有的关键问题,并且可以正确进行快速排序。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |