c语言快速排序代码

以下是C语言中的快速排序算法示例代码:

c
#include <stdio.h> // 交换两个元素的值 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } // 分割数组并返回分割点的索引 int partition(int arr[], int low, int high) { int pivot = arr[high]; // 选择最后一个元素作为枢轴 int i = (low - 1); // 初始化分割点的索引 for (int j = low; j <= high - 1; j++) { // 如果当前元素小于或等于枢轴,将其交换到分割点的右侧 if (arr[j] <= pivot) { i++; swap(&arr[i], &arr[j]); } } // 最后交换枢轴元素到正确的位置 swap(&arr[i + 1], &arr[high]); return (i + 1); } // 快速排序函数 void quickSort(int arr[], int low, int high) { if (low < high) { // 找到分割点 int pivotIndex = partition(arr, low, high); // 分别对分割点的左侧和右侧子数组进行排序 quickSort(arr, low, pivotIndex - 1); quickSort(arr, pivotIndex + 1, high); } } int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); printf("原始数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); quickSort(arr, 0, n - 1); printf("排序后的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }

这段代码实现了快速排序算法,首先选择数组中的一个元素作为枢轴,然后将数组分成两个子数组,左侧子数组的元素小于枢轴,右侧子数组的元素大于枢轴。接着,对这两个子数组分别进行递归排序,最终得到排序好的数组。在示例中,我们对一个整数数组进行排序,并输出结果。您可以根据需要将其应用到其他类型的数组上。

partition 函数:这个函数用于将数组分割成两个子数组,左侧的子数组包含小于或等于枢轴值的元素,右侧的子数组包含大于枢轴值的元素。它返回枢轴在排序后的数组中的位置。

quickSort 函数:这是递归函数,用于对子数组进行排序。它首先找到分割点,然后分别对左侧和右侧的子数组递归调用 quickSort 函数进行排序。

swap 函数:这个函数用于交换两个元素的值,通常用于在 partition 函数中调整元素的位置。

快速排序是一种高效的排序算法,它的平均时间复杂度为 O(n log n),其中 n 是数组的大小。这使它成为处理大型数据集的有力工具。如果你有任何进一步的问题或需要更多的解释,请随时提出。