C语言 快速排序法

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):
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46121540/article/details/129780901