C语言实现快速排序算法详解与实践
版权申诉
5星 · 超过95%的资源 194 浏览量
更新于2024-12-20
1
收藏 10KB ZIP 举报
资源摘要信息:"快速排序算法是一种高效的排序算法,由C. A. R. Hoare在1960年提出。它采用分治策略,通过一个划分操作将要排序的数组分为独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再递归地对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序的基本思想是:
1. 从数组中选择一个元素作为基准(pivot),通常选择第一个元素或最后一个元素。
2. 重新排列数组,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆放在基准的后面。这个操作称为划分(partition)。
3. 递归地将小于基准值元素的子数组和大于基准值元素的子数组排序。
在C语言中实现快速排序算法,通常会定义一个核心的partition函数,负责对数组进行划分,以及一个递归的quicksort函数,负责处理实际的排序逻辑。下面是一个简单的C语言实现快速排序的示例代码:
```c
#include <stdio.h>
// 交换两个元素的值
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
// 划分函数
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 选择最后一个元素作为基准
int i = (low - 1); // i指针初始位于第一个元素之前
for (int j = low; j <= high - 1; j++) {
// 如果当前元素小于或等于基准
if (arr[j] <= pivot) {
i++; // 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) {
// pi是划分后基准的索引位置
int pi = partition(arr, low, high);
// 分别对划分后的两部分进行快速排序
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
// 打印数组的函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// 测试快速排序的主函数
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
```
上述代码中定义了快速排序的核心函数,包括partition和quickSort,以及辅助函数swap和printArray,用于演示排序结果。在实际应用中,快速排序算法的性能通常在最坏情况下为O(n^2),但平均情况下具有O(nlogn)的性能,这使得它在大型数据集上非常高效。"
注意:由于描述部分没有提供额外信息,本回答仅根据标题中提及的快速排序和C语言展开说明。
2017-05-08 上传
2011-03-11 上传
2022-06-28 上传