#include <bits/stdc++.h>
using namespace std;
int* qs(int a[], int L, int R){
//递归出口
if(L >= R)
//返回排序后的数组
return a;
int k = a[L];
int i = L , j = R;
while(i != j){
while( j > i && a[j] >= k)
--j;
//对右边开始查找到比k小的 找到了就立马交换两个数值
swap(a[i],a[j]);
while( j > i && a[i] <= k){
++i;
}
//查找到比K大的 就立马交换
swap(a[i],a[j]);
}
//递归左边部分
qs(a,L,i-1);
//递归右边部分
qs(a,i+1,R);
//为什么不把k算进来 应为k已将到了最中间的位置所以对左边的[L,i-1]右边的[i+1,R]进行快速排序
}
int main()
{
int a[] = {1,5,2,4,3};
qs(a,0,4);
for(int i = 0; i < 5; i++)
printf(" %d",a[i]);
return 0;
}
快速排序 简单版
最新推荐文章于 2022-08-31 20:48:32 发布