C语言快速排序代码
以下为C语言快速排序代码,供参考:
#include <stdio.h>
void quick_sort(int arr[], int left, int right) {
int i, j, pivot, temp;
if (left >= right) {
return;
}
// 选取基准点
pivot = arr[left];
i = left + 1;
j = right;
while (1) {
// 从左往右找到第一个大于等于基准点的元素
while (i <= right && arr[i] < pivot) {
i++;
}
// 从右往左找到第一个小于等于基准点的元素
while (j >= left + 1 && arr[j] > pivot) {
j--;
}
if (i > j) {
break;
}
// 交换i和j位置的元素
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 将基准点放到正确的位置上
arr[left] = arr[j];
arr[j] = pivot;
// 递归处理左右子数组
quick_sort(arr, left, j - 1);
quick_sort(arr, j + 1, right);
}
int main() {
int arr[] = {8, 2, 4, 9, 3, 6};
int n = 6;
int i;
quick_sort(arr, 0, n - 1);
printf("Sorted array: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
快速排序的实现思路如下:
- 选取一个基准点,将数组分为左右两个子数组;
- 对左右子数组分别进行递归排序;
- 合并左右子数组。
具体实现时,我们可以选取数组的最左边元素为基准点,然后从左往右找到第一个大于等于基准点的元素,从右往左找到第一个小于等于基准点的元素,然后交换这两个元素的位置,继续向中间靠拢,直到左右指针相遇。最后将基准点放到正确的位置上,递归处理左右子数组。
原文地址: https://www.cveoy.top/t/topic/lWL 著作权归作者所有。请勿转载和采集!