c语言实现 对大量数据快速排序 实践快速排序的算法及分治策略
时间: 2023-10-23 08:35:34 浏览: 57
快速排序(Quick Sort)是一种高效的排序算法,它的核心思想是分治策略:将一个大问题分解为若干个小问题,递归求解小问题,最后将小问题的解合并起来得到大问题的解。具体来说,快速排序的算法流程如下:
1. 选择一个元素作为基准(一般是第一个元素或最后一个元素),将待排序的数组分成两个部分,左边的部分都小于基准,右边的部分都大于基准。
2. 对左右两个部分分别进行递归排序,直到每个部分只有一个元素或为空。
3. 将左右两个部分的排序结果合并起来,得到最终的排序结果。
下面是一个基于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[low]; // 选择第一个元素为基准
int i = low, j = high;
while (i < j) {
// 从右侧向左侧扫描,寻找第一个小于基准的元素
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
swap(&arr[i], &arr[j]);
}
// 从左侧向右侧扫描,寻找第一个大于基准的元素
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
swap(&arr[i], &arr[j]);
}
}
// 将基准元素放置到正确的位置上
arr[i] = pivot;
return i;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high); // 分割数组
quickSort(arr, low, pivot - 1); // 递归排序左半部分
quickSort(arr, pivot + 1, high); // 递归排序右半部分
}
}
int main() {
int arr[] = {4, 2, 8, 5, 1, 6, 9, 3, 7};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个示例代码中,我们定义了两个函数:`partition`和`quickSort`。`partition`函数用来将待排序数组分割成两个部分,并返回基准元素最终所在的位置;`quickSort`函数则是递归实现快速排序的主要函数。
在`partition`函数中,我们选择第一个元素作为基准,然后使用双指针法从左右两侧扫描待排序数组,将小于基准的元素放到数组左侧,大于基准的元素放到数组右侧,最终得到基准元素的正确位置。
在`quickSort`函数中,我们首先判断待排序数组是否需要分割,如果需要,则选择一个基准元素并分割数组,然后递归排序左右两半部分。
希望这个示例代码能够帮助您更好地理解快速排序算法及分治策略。