以下为C语言快速排序代码,供参考:

#include <stdio.h>

void quick_sort(int arr[], int left, int right) {
    int i, j, pivot, temp;

    if (left >= right) {
        return;
    }

    // 选取基准点
    pivot = arr[left];

    i = left + 1;
    j = right;

    while (1) {
        // 从左往右找到第一个大于等于基准点的元素
        while (i <= right && arr[i] < pivot) {
            i++;
        }

        // 从右往左找到第一个小于等于基准点的元素
        while (j >= left + 1 && arr[j] > pivot) {
            j--;
        }

        if (i > j) {
            break;
        }

        // 交换i和j位置的元素
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    // 将基准点放到正确的位置上
    arr[left] = arr[j];
    arr[j] = pivot;

    // 递归处理左右子数组
    quick_sort(arr, left, j - 1);
    quick_sort(arr, j + 1, right);
}

int main() {
    int arr[] = {8, 2, 4, 9, 3, 6};
    int n = 6;
    int i;

    quick_sort(arr, 0, n - 1);

    printf("Sorted array: ");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    printf("\n");

    return 0;
}

快速排序的实现思路如下:

  1. 选取一个基准点,将数组分为左右两个子数组;
  2. 对左右子数组分别进行递归排序;
  3. 合并左右子数组。

具体实现时,我们可以选取数组的最左边元素为基准点,然后从左往右找到第一个大于等于基准点的元素,从右往左找到第一个小于等于基准点的元素,然后交换这两个元素的位置,继续向中间靠拢,直到左右指针相遇。最后将基准点放到正确的位置上,递归处理左右子数组。

C语言快速排序代码

原文地址: https://www.cveoy.top/t/topic/lWL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录