原理建议去B站看视频
注意!注意!注意!刚开始移动的顺序真的很重要,可以试试顺序换一下,整个代码就出问题了。我试过的。(第11和12行)
代码如下(从小到大 为例):
#include<iostream>
using namespace std;
const int N=1e+5; int arr[N];
void quickSort(int arr[],int l,int r)//left和right的首字母
{
if(l>=r) return;
int base,temp;int i=l,j=r;
base = arr[l]; //取最左边的数为基准数
while(i<j)
{
while(arr[j]>=base&&i<j)j--;//顺序很重要
while(arr[i]<=base&&i<j) i++;
if(i < j)
{temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}//基准数归位
arr[l]=arr[i];arr[i]=base;
quickSort(arr,l,i-1);//递归左边
quickSort(arr,i+1,r);//递归右边
}
int main()
{ int n;cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&arr[i]);
quickSort(arr,1,n);
for(int i=1;i<=n;i++) printf("%d ",arr[i]);
return 0; }
从大到小:改如下即可
void quickSort(int arr[],int l,int r)
{
if(l>=r) return;
int base,temp;int i=l,j=r;
base=arr[l];
while(i<j)
{
while(arr[j]<=base&&i<j)j--;
while(arr[i]>=base&&i<j)i++;
if(i<j)
{temp=arr[i];arr[i]=arr[j];arr[j]=temp;}
}
arr[l]=arr[i];arr[i]=base;
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}