请给我一个c语言的快速排序算法
以下是一个基于递归实现的快速排序算法:
void quicksort(int arr[], int left, int right) {
int i = left, j = right;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (left < j) {
quicksort(arr, left, j);
}
if (i < right) {
quicksort(arr, i, right);
}
}
该算法的基本思路是选取一个枢轴值(pivot),将数组分为两部分,左边的元素小于等于枢轴值,右边的元素大于等于枢轴值,然后递归地对左右两部分进行排序。在实现中,我们通过两个指针 i 和 j 分别从左右两端向中间扫描数组,当找到左边的元素大于枢轴值或者右边的元素小于枢轴值时,就交换这两个元素的位置。最后,当左右两个指针相遇时,就完成了一次分割。
原文地址: https://www.cveoy.top/t/topic/KNa 著作权归作者所有。请勿转载和采集!