C语言快速排序完整程序代码及其详细解释
时间: 2023-06-28 14:12:57 浏览: 66
以下是C语言实现快速排序的完整程序代码及其详细解释:
```c
#include <stdio.h>
// 快速排序函数
void quickSort(int arr[], int left, int right)
{
// 如果left >= right,则表示数组已经排好序,直接返回
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
// i 和 j 分别从左右两端向中间扫描,找到第一个大于等于pivot的元素和第一个小于等于pivot的元素,交换它们的位置
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
// 交换 pivot 元素和 i/j 指向的元素
arr[i] = pivot;
// 递归排序左右两个子序列
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main()
{
int arr[] = { 5, 3, 8, 4, 2, 7, 1, 10 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("排序前的序列:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
quickSort(arr, 0, len - 1);
printf("\n排序后的序列:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
程序运行结果:
```
排序前的序列:5 3 8 4 2 7 1 10
排序后的序列:1 2 3 4 5 7 8 10
```
快速排序是一种基于分治思想的排序算法,它的基本思路是选定一个基准元素(pivot),将数组分成两个子序列,左边的子序列的所有元素都小于等于基准元素,右边的子序列的所有元素都大于等于基准元素。然后递归地对左右两个子序列进行排序,直到整个数组有序。
在上面的代码中,快速排序函数的参数包括待排序数组 `arr`、待排序区间的左右端点 `left` 和 `right`。如果左右端点相等或左端点大于右端点,说明当前数组已经排好序,直接返回即可。
首先将数组的第一个元素作为基准元素,从数组的两端开始扫描。如果右端元素大于等于基准元素,就向左移动右端指针,直到找到第一个小于基准元素的元素。然后将这个元素移到左端的位置。接着从左端开始扫描,如果左端元素小于等于基准元素,就向右移动左端指针,直到找到第一个大于基准元素的元素。然后将这个元素移到右端的位置。重复上述步骤,直到左端指针和右端指针相遇为止。
最后将基准元素移到两个子序列的分界点,递归地对左右子序列进行排序。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)