C语言 快速排序法
目录
什么是快速排序算法
快速排序是一种高效的排序算法,它的基本思想是将一个大数组分成两个较小的子数组,一个子数组中所有元素都比另一个子数组中的元素小,然后递归地排序两个子数组。因为它是一种分治算法,所以是递归的,具有很高的效率。
C语言实现快速排序
使用 C 语言实现快速排序也很简单,下面是 C 语言快速排序的代码:
#include <stdio.h>
void quick_sort(int arr[], int low, int high) {
if (low >= high) return;
int pivot = arr[(low+high)/2];
int i = low-1, j = high+1;
while (i < j) {
do i++; while (arr[i] < pivot);
do j--; while (arr[j] > pivot);
if (i < j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
quick_sort(arr, low, j);
quick_sort(arr, j+1, high);
}
int main() {
int arr[] = {
6, 5, 3, 1, 8, 7, 2, 4};
int len = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, len-1);
for (int i=0; i<len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
上面代码中,我们定义了一个函数 quick_sort,它的参数是待排序的数组 arr、子数组的起始位置 low 和子数组的结束位置 high。在函数中,首先判断子数组的长度是否小于等于1,如果是,则直接返回(递归边界)。否则,我们选取子数组中间的元素作为基准点 pivot,并使用 while 循环将子数组分成两个部分:小于 pivot 的元素和大于 pivot 的元素。然后,我们递归地对左侧和右侧的子数组进行排序。
快速排序的时间复杂度
快速排序的时间复杂度取决于递归的深度和每次划分的元素个数。其平均时间复杂度为 O(n*logn),最坏情况下的时间复杂度为 O(n^2)。这里的最坏情况指的是基准点的选择导致了最坏的划分情况。在实际应用中,快速排序算法的平均时间复杂度通常要优于其他排序算法,因此被广泛应用。
动画演示
下面是快速排序的动画演示(作者:Koshy George):