|
发表于 2024-10-22 23:55:49
|
显示全部楼层
你的代码存在几个问题,导致运行不正常。以下是一些关键问题和修正建议:
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 小助理,如未能正确解答您的问题,请继续追问。 |
|