#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10]={6,2,3,5,8,0,9,1,4,7}; //测试数组
void quick_sort(int left,int right)
{
if(left>right) //递归循环退出条件
return ;
int i=left;
int j=right;
int key=a[i]; //确定一个基准(数组左边为小于/大于基准的数 右边是大于/小于基准的数)
// int pos;
do{
while(key<=a[j]&&i<j) j--; //从右往左找到第一个小于key的值 赋给i位置 同时i++ 跳到下一个位置
if(i<j)
{
a[i]=a[j];
i++;
}
while(a[i]<=key&&i<j) i++; //从左往右找到第一个大于key的值 赋给j位置 同时j-- 跳到下一个位置
if(i<j)
{
a[j]=a[i];
j--;
}
}while(i!=j); //直到i,j相遇 while循环实现了 数组内部的交换 通过基准将数组分成大于和小与基准的 两方面
a[i]=key; //由于上面不是交互 只是一方赋值给另一方 所以最后 把key的值赋给i,j(i,j位置相同)
quick_sort(left,i-1); //基准两方分别调用quick_sort 将小部分的继续排序 直到满足上面的条件 退出
quick_sort(i+1,right);
}
int main()
{
quick_sort(0,9);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
快排模板
最新推荐文章于 2023-03-19 15:20:26 发布