目录
什么是快速排序
快速排序的步骤:
以上:
图片步骤简绘:
代码实现:
快速排序是由C.A.R.Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,依次达到整个数据变成有序序列
先给大家介绍一下算法中要用到的几个重要的标志
1、游标:f b
2、标杆:t
3、L,R 区间范围
假设有一组数据,我们将第一个元素视为标杆,假设标杆是8,那么我们就可以开始第一次排序了
第一次排序最终是要实现8左边都是比8小的,8右边都是比8大的
f下标的元素如果比8小,游标就向右边进行移动,每次移动一个元素,直至f下标的元素比8大。则游标f停止移动
b下标的元素如果比8大,游标就向左边进行移动,每次移动一个元素,直至b下标的元素比8小,则游标b停止移动
当游标f,b都停止移动时,交换对应的元素
交换完成后继续重复以上的蓝色字体步骤
当游标f,b相遇并且交错的时候,交换标杆和游标b对应的元素、
第一次排序结束,也就是说实现了8左边都是比8小的,8右边都是比8大的这一目标
此刻8左右两边各分成了左右区间,在对左右区间重复以上的排序步骤,也就是所谓的递归
直至区间中只有一个元素(区间中只有一个元素时,我们视为已序),则快速排序全部完成

#include
#include
using namespace std;
void _quick_sort(int arr[], int low, int hight);//核心递归函数
void quick_sort(int arr[], int size)
{_quick_sort(arr, 0, size - 1);//入口函数封装
}
void _quick_sort(int arr[], int low, int hight)
{//1、确定标杆 游标int t = arr[low];//标杆就是t,我们拿的第一个元素当成标杆int f = low + 1;//游标分别是f和b,f是左游标,b是右游标int b = hight;//2、设置递归结束条件if (low >= hight)//区间中最多只有一个元素-视为有序,也就是排序完成return;//3、开始划分大小区间int temp;//用于换成交换的变量while (f <= b)//f>b 说明区间搜索完成了{//3.1 移动游标while (f <= b&&arr[f] <= t) f++;//一直找到比标杆大的元素为止while (f <= b&&arr[b] >= t) b--;//一直找到比标杆小的元素为止//3.2 两个游标停了-交换if (f < b){temp = arr[f];arr[f] = arr[b];arr[b] = temp;f++;b--;}//f>b 出循环 完成了分区//4、标杆归位 t和b进行交换//int t = arr[low];arr[low] = arr[b];arr[b] = t;//5、递归 标杆的位置在b_quick_sort(arr, low, b - 1);//递归左区间_quick_sort(arr, b + 1, hight);//递归右区间}}
int main()
{int arr[]{8, 6, 1, 4, 5, 7, 2, 3};quick_sort(arr, 8);return 0;
}
