初始状态:6 1 2 7 9 3 4 5 10 8
排序的过程图
首先哨兵j开始出动。因为此处设置的基准数是最左边的数,所以需要让哨兵j先出动,这一点非常重要(请自己想一想为什么) ::最后和基准数交换的一定是小于基准数的数、
#include <cstdio> #include <algorithm> using namespace std; int s[100],n; void quick_sort(int left,int right){//left--right的区间排序 if(left>=right) return; int tm=s[left]; //基准数 int i=left,j=right; while(i!=j){ while(s[j]>=tm&&i<j) j--; //从右边往左边找 while(s[i]<=tm&&i<j) i++; //从左往右找 if(i<j)swap(s[i],s[j]); } swap(s[left],s[i]); quick_sort(left,i-1);quick_sort(i+1,right); } int main(){ //freopen("data.in","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",s+i); quick_sort(1,n); // for(int i=1;i<=n;i++) printf("%d ",s[i]); // printf(" "); }