快速排序递归算法C语言实现
时间: 2024-12-04 11:28:42 浏览: 47
快速排序的递归算法在C语言中有多种实现方式。这里有两个示例:
1. **基于分区的递归**[^1]:
```c
static void Quick(int *arr, int start, int end) {
// ... (省略部分代码)
int par = Partition(arr, start, end);
if (start < par - 1) Quick(arr, start, par - 1);
if (par < end - 1) Quick(arr, par + 1, end);
}
void QuickSort(int *arr, int len) {
Quick(arr, 0, len - 1);
}
```
这段代码定义了一个`Quick`函数,它接受一个数组和两个索引作为参数。通过递归地对分割后的子数组进行排序,直到达到基本情况(数组为空或只有一个元素)。
2. **使用`PartQulickSort2`的递归**[^2]:
```c
void QulickSort(int*a, int left, int right) {
if (left >= right) return;
int mid = PartQulickSort2(a, left, right); // 分区并找到中间值
QulickSort(a, left, mid - 1); // 排序左侧
QulickSort(a, mid + 1, right); // 排序右侧
}
int main() {
// ... (省略部分代码)
PartQulickSort2(a, 0, sz - 1); // 初始化分区操作
PrintSortArry(a, sz - 1); // 打印排序后的数组
QulickSort(a, 0, sz - 1); // 再次排序
PrintSortArry(a, sz - 1); // 打印最终结果
return 0;
}
```
这个版本通过`PartQulickSort2`函数完成一次划分,然后递归地对左右两侧的子数组进行排序。
阅读全文