快速排序
#include <stdio.h>
// 打印数组
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 将数组分为两部分,小于基准的在左边,大于基准的在右边
int partition(int arr[], int left, int right) {
int base = arr[left]; // 选择最左边的元素作为基准
while (left < right) {
// 从右往左找到第一个比基准小的元素
while (left < right && arr[right] > base) {
right--;
}
if (left < right) {
arr[left] = arr[right]; // 将找到的小于基准的元素放到左边
left++;
}
// 从左往右找到第一个比基准大的元素
while (left < right && arr[left] < base) {
left++;
}
if (left < right) {
arr[right] = arr[left]; // 将找到的大于基准的元素放到右边
right--;
}
}
arr[left] = base; // 将基准元素放置到正确的位置上
return left; // 返回基准元素的索引
}
// 快速排序算法
void quickSort(int arr[], int left, int right) {
if (left < right) {
int index = partition(arr, left, right); // 获取基准元素的索引
// 对基准元素左边的子数组进行递归排序
quickSort(arr, left, index - 1);
// 对基准元素右边的子数组进行递归排序
quickSort(arr, index + 1, right);
}
}
int main() {
int arr[] = { 54, 26, 93, 17, 77, 31, 44, 55, 20 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("原数组:\n");
printArray(arr, n);
// 调用快速排序函数
quickSort(arr, 0, n - 1);
printf("排序后数组:\n");
printArray(arr, n);
return 0;
}