C语言对待排序序列使用快速排序算法进行排序,计算第一次划分之后分界元素在序列中的位置和最终排序结果(划分和分界元素的概念参照课本)(在序列中的位置跟书上一致,从1而不是从0开始) 【输入形式】 序列元素个数,序列 【输出形式】 第一次划分之后分界元素的位置,最终排序结果 【样例输入】 5 0 2 1 -1 -2 【样例输出】 3 -2 -1 0 1 2
时间: 2023-12-14 10:37:13 浏览: 35
以下是C语言代码实现:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right);
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
quick_sort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left]; // 选择第一个元素作为分界元素
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) { // 从右往左找到第一个比分界元素小的元素
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) { // 从左往右找到第一个比分界元素大的元素
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot; // 分界元素归位
printf("%d ", i + 1); // 输出分界元素的位置
quick_sort(arr, left, i - 1); // 递归排序左半部分
quick_sort(arr, i + 1, right); // 递归排序右半部分
}
```
输入样例:
```
5
0 2 1 -1 -2
```
输出样例:
```
3 -2 -1 0 1 2
```
代码解释:
1. 先读入序列元素个数和序列。
2. 调用快速排序函数 `quick_sort` 对序列进行排序。
3. 在每次分界元素归位时,输出分界元素在序列中的位置。
4. 递归调用 `quick_sort` 对左右两部分序列进行排序。