算法1:快速排序
part1:思维导图展示

part2:快速排序作用
-
输入:乱序数组
-
输出:有序数组
-
判别:
- 条件1:排序算法
- 条件2:选中其中某一值
- 条件3:左右比较交换
- 条件4:分治法解决左右问题
-
联结:
- 算法
- 时间复杂度:平均:O(nlogn),最好的情况是每次都进行均分,最坏的情况是每次都选择左右,这时会退化成为链表
- 空间复杂度:O(nlogn),分析:递归深度为logn,每次需要访问n个。
- 稳定性:不稳定,因为选择的参考数据不一样,会导致排序的过程不一样。
- 算法
-
步骤
- 核心步骤
1,选取中间值
2,在左侧找到比中间值大的
3,在右侧找到比中间值小的
4,交换二者
5,直到二者最后都到中间的位置,退出
6,对左侧部分重复该操作
7,对右侧部分重复该操作
- 核心步骤
part3:快速排序模板
void quick_sort(int arr[],int l, int r) { if(l>=r) return; int i = l - 1; int j = r + 1; int x = arr[l+r>>1]; while(i<j) { do i++; while(arr[i]<x) do j--; while(arr[j]>x) if(i<j) swap(arr[i],arr[j]); } //这里用i 或者是用j 都是一样的,都可以实现快速排序。 quick_sort(arr,l,j); quick_sort(arr,j+1,r); }
实例部分
日后补充

浙公网安备 33010602011771号