📜  用于快速排序的函数 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:40:53.922000             🧑  作者: Mango

用于快速排序的函数 - C 编程语言

快速排序是一种常用的排序算法,速度比较快且可以应用到大部分类型的数据。在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),具有较好的应用性,值得我们掌握。