📅  最后修改于: 2023-12-03 15:40:53.922000             🧑  作者: Mango
快速排序是一种常用的排序算法,速度比较快且可以应用到大部分类型的数据。在C语言中,我们可以使用以下函数实现快速排序:
void quicksort(int arr[], int low, int high) {
int pivot, i, j, temp;
if (low < high) {
pivot = low;
i = low;
j = high;
while (i < j) {
while (arr[i] <= arr[pivot] && i <= high) {
i++;
}
while (arr[j] > arr[pivot] && j >= low) {
j--;
}
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
temp = arr[j];
arr[j] = arr[pivot];
arr[pivot] = temp;
quicksort(arr, low, j - 1);
quicksort(arr, j + 1, high);
}
}
上述代码实现了快速排序的程序,使用递归的方式对数组进行分治排序。具体实现如下:
下面是对该函数进行注释的代码:
void quicksort(int arr[], int low, int high) {
int pivot, i, j, temp;
// 确定排序边界
if (low < high) {
// 设置基准数位置
pivot = low;
i = low;
j = high;
// 进行分割
while (i < j) {
// 从左侧开始找到第一个比基准数大的数
while (arr[i] <= arr[pivot] && i <= high) {
i++;
}
// 从右侧开始找到第一个比基准数小的数
while (arr[j] > arr[pivot] && j >= low) {
j--;
}
// 如果没有交叉,交换两个数的位置
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 当左右指针交叉时,将基准数位置与当前指针位置进行互换
temp = arr[j];
arr[j] = arr[pivot];
arr[pivot] = temp;
// 对左侧和右侧进行递归操作
quicksort(arr, low, j - 1);
quicksort(arr, j + 1, high);
}
}
通过上述代码可以看出,快速排序是一种比较快的排序算法,时间复杂度为O(nlogn),具有较好的应用性,值得我们掌握。