请问可以帮我写用c语言实现快速排序的代码吗?并对每一步给出注释,以markdown格式输出
时间: 2024-02-27 15:54:09 浏览: 121
快速排序的C语言代码
4星 · 用户满意度95%
当然可以,请看以下代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right) {
if (left < right) {
int i = left, j = right, pivot = arr[left]; // 定义左右指针和基准值
while (i < j) {
while (i < j && arr[j] > pivot) j--; // 从右向左找到第一个小于等于基准值的元素
if (i < j) arr[i++] = arr[j]; // 将该元素放到左边
while (i < j && arr[i] < pivot) i++; // 从左向右找到第一个大于等于基准值的元素
if (i < j) arr[j--] = arr[i]; // 将该元素放到右边
}
arr[i] = pivot; // 将基准值放到正确的位置
quick_sort(arr, left, i - 1); // 对左边的子数组进行递归排序
quick_sort(arr, i + 1, right); // 对右边的子数组进行递归排序
}
}
int main() {
int arr[10] = {5, 2, 6, 0, 3, 9, 1, 7, 4, 8};
quick_sort(arr, 0, 9);
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
注释如下:
```c
void quick_sort(int arr[], int left, int right) {
if (left < right) { // 如果左指针小于右指针,即数组长度大于1
int i = left, j = right, pivot = arr[left]; // 定义左右指针和基准值
while (i < j) { // 只要左右指针没有相遇
while (i < j && arr[j] > pivot) j--; // 从右向左找到第一个小于等于基准值的元素
if (i < j) arr[i++] = arr[j]; // 将该元素放到左边,并将左指针右移
while (i < j && arr[i] < pivot) i++; // 从左向右找到第一个大于等于基准值的元素
if (i < j) arr[j--] = arr[i]; // 将该元素放到右边,并将右指针左移
}
arr[i] = pivot; // 将基准值放到正确的位置
quick_sort(arr, left, i - 1); // 对左边的子数组进行递归排序
quick_sort(arr, i + 1, right); // 对右边的子数组进行递归排序
}
}
```
在主函数中,我们定义了一个包含10个元素的整数数组,然后调用`quick_sort`函数进行排序。最后,我们遍历数组并将其输出。
阅读全文