C语言完成以下代码:题目描述 设有线性表L=(a1,a2,a3,…,an),数据元素为正整数,存放在一维数组A[n]中,设计一个算法,以表中an作为参考基准,将该表分为左、右两部分,其中左半部分每个元素均小于an,右半部分每个元素均大于或等于an,an位于分界位置上(要求结果仍存放在A[n]中)。-1为线性表创建的结束标志。 输入 多组测试数据,直到输入文件结束。每组测试数据包含一行,若干个待排序的正整数,以-1结束。 输出 输出排序后的结果,数据间以一个空格隔开。每组测试数据输出一行,行末无空格。
时间: 2024-03-01 19:51:28 浏览: 127
以下是代码实现:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int *arr, int left, int right) {
if (left >= right) { // 递归结束条件
return;
}
int pivot = arr[right]; // 参考基准
int i = left, j = right - 1;
while (i <= j) {
while (i <= j && arr[i] < pivot) { // 左半部分找到第一个大于等于参考基准的元素
i++;
}
while (i <= j && arr[j] >= pivot) { // 右半部分找到第一个小于参考基准的元素
j--;
}
if (i < j) { // 交换左右两部分的元素
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i], &arr[right]); // 将参考基准归位
quickSort(arr, left, i-1); // 对左半部分进行递归排序
quickSort(arr, i+1, right); // 对右半部分进行递归排序
}
int main() {
int arr[100];
int n, i;
while (scanf("%d", &n) == 1 && n != -1) {
i = 0;
while (n != -1) {
arr[i++] = n;
scanf("%d", &n);
}
quickSort(arr, 0, i-1);
for (int j = 0; j < i; j++) {
printf("%d", arr[j]);
if (j != i-1) {
printf(" ");
}
}
printf("\n");
}
return 0;
}
```
思路:
1. 输入数据,存放在数组中。
2. 选择最后一个元素作为参考基准。
3. 使用快速排序算法,将数组分为左、右两部分,其中左半部分每个元素均小于参考基准,右半部分每个元素均大于或等于参考基准。
4. 输出排序后的结果。
5. 重复 1-4 步,直到输入文件结束。
注意事项:
1. 代码中使用了 swap 和 quickSort 函数,请自行实现。
2. 代码中使用了 scanf 和 printf 函数,请确保已经包含 stdio.h 头文件。
阅读全文