写一段c语言快速排序的代码并附有详细注释
时间: 2023-06-25 19:02:23 浏览: 63
以下是一段使用快速排序算法的C语言代码,注释详细解释了每个步骤的含义和作用:
```c
#include <stdio.h>
// 快速排序函数
void quickSort(int arr[], int left, int right) {
int i, j, pivot, temp;
// 如果左边索引大于或等于右边索引,则表示已经排序完成
if (left >= right) {
return;
}
// 将左边第一个元素作为基准值(也可以选择随机数)
pivot = arr[left];
i = left;
j = right;
// 开始排序
while (i < j) {
// 从右向左找到第一个小于基准值的数
while (arr[j] >= pivot && i < j) {
j--;
}
// 从左向右找到第一个大于基准值的数
while (arr[i] <= pivot && i < j) {
i++;
}
// 交换这两个数的位置
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 将基准值放到它应该在的位置
arr[left] = arr[i];
arr[i] = pivot;
// 递归排序左半部分
quickSort(arr, left, i - 1);
// 递归排序右半部分
quickSort(arr, i + 1, right);
}
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: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
通过上述代码,我们可以实现一个快速排序函数,它接受三个参数:待排序数组、左边界和右边界。该函数会递归地将数组划分为较小的子数组并对它们进行排序,最终将整个数组排序完成。