### SDUT C语言实验中的快速排序实现
快速排序是一种高效的排序算法,其基本思想是通过分治法将待排序的数据分为较小和较大的两部分,再递归地对这两部分进行排序。以下是基于引用内容以及标准快速排序方法的实现代码及其解释。
#### 快速排序的核心逻辑
快速排序的关键在于选取一个基准值(pivot),并将其作为划分的标准。小于等于该基准值的元素放在左侧,大于它的元素放在右侧。这一过程可以通过递归来完成[^1]。
```c
#include <stdio.h>
// 函数声明
void swap(int *a, int *b);
int partition(int arr[], int low, int high);
void quickSort(int arr[], int low, int high);
// 主函数测试
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
printf("原始数组: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
quickSort(arr, 0, n-1);
printf("排序后的数组: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
// 交换两个元素
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 划分操作
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 基准值
int i = (low - 1); // 小于基准值的部分索引
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) { // 如果当前元素小于或等于基准值
i++; // 更新索引
swap(&arr[i], &arr[j]); // 交换位置
}
}
swap(&arr[i + 1], &arr[high]); // 把基准值放到中间
return (i + 1);
}
// 快速排序主函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 获取分区点
quickSort(arr, low, pi - 1); // 对左半部分递归排序
quickSort(arr, pi + 1, high); // 对右半部分递归排序
}
}
```
上述代码实现了经典的快速排序算法。它首先定义了一个`swap`函数用于交换数组中的两个元素,接着是一个`partition`函数来执行一次划分操作,并返回新的基准值的位置。最后,在`quickSort`函数中调用这两个辅助函数以完成整个排序过程。
#### 关于输入多个整数并按顺序输出的情况
如果题目要求输入三个整数并通过某种方式比较它们的大小,则可以采用如下简单的方式:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int x, y, z;
scanf("%d,%d,%d", &x, &y, &z); // 输入三个整数,逗号隔开
if (x > y) {
int tmp = x;
x = y;
y = tmp;
}
if (x > z) {
int tmp = x;
x = z;
z = tmp;
}
if (y > z) {
int tmp = y;
y = z;
z = tmp;
}
printf("%d %d %d\n", x, y, z); // 输出从小到大的结果,空格隔开
return 0;
}
```
此段代码按照逐步比较的思想完成了三数排序的任务[^2]。
---
###