用c语言递归函数写快速排序
时间: 2024-10-18 16:13:42 浏览: 25
快速排序是一种基于分治策略的高效排序算法,它的基本思想是选取一个基准值(pivot),将数组分为两部分,一部分所有元素都比基准小,另一部分所有元素都比基准大,然后对这两部分递归地进行同样的操作。以下是使用C语言实现的快速排序的递归函数:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition (int arr[], int low, int high) {
int pivot = arr[high]; // 选择最后一个元素作为基准
int i = (low - 1); // Index of smaller element
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); // 对右半部分递归排序
}
}
// 测试函数
int main() {
int data[] = {9, 7, 5, 11, 12, 2, 14, 3, 10, 6};
int size = sizeof(data) / sizeof(data[0]);
printf("Original array: \n");
for (int i=0; i < size; i++)
printf("%d ", data[i]);
quickSort(data, 0, size - 1);
printf("\nSorted array: \n");
for (int i=0; i < size; i++)
printf("%d ", data[i]);
return 0;
}
```
当你运行这个程序,输入的数组会被排序并显示结果。注意,快速排序在最坏的情况下时间复杂度是O(n^2),但平均情况下的时间复杂度是O(n log n),所以它通常被认为是高效的。
阅读全文