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 是数组的大小。这使它成为处理大型数据集的有力工具。如果你有任何进一步的问题或需要更多的解释,请随时提出。