快速排序 c语言实现及注释
时间: 2023-11-15 13:00:44 浏览: 115
使用双向链表实现快速排序,C语言
5星 · 资源好评率100%
快速排序是一种常用的排序算法,其时间复杂度为O(nlogn)。其基本思想是通过一趟排序将待排序列分成两部分,其中一部分的所有元素均比另一部分的所有元素小,然后再按此方法对这两部分分别进行快速排序,以达到整个序列有序的目的。
以下是C语言实现及注释:
```c
#include <stdio.h>
// 快速排序函数
void quick_sort(int arr[], int left, int right) {
if (left >= right) { // 如果左边界大于等于右边界,直接返回
return;
}
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[] = {5, 3, 8, 4, 2, 7, 1, 6};
int len = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, len - 1);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
注释中已经解释了代码的实现过程,简单来说,就是通过左右指针和基准值将待排序列分成两部分,然后递归对这两部分进行排序,最终得到有序序列。
阅读全文