void quickSort(int(&arr)[BUFSIZ],int start,int end) { int key=arr[start]; int p1=start; int p2=end; if(end<=start)return; while(p1!=p2){ if(arr[p1]>=key && arr[p2]<key){ swap(arr[p1],arr[p2]); if((p2-p1)>2){ p1=p1+1; p2=p2-1; }else if((p2-p1)==2){ if(arr[p1+1]>key){ p2=p2-2; }else{ p1=p1+1; p2=p2-1; } }else{ p2=p2-1; } }else if(arr[p1]>=key){ p2=p2-1; }else if(arr[p2]<key){ p1=p1+1; }else{ if((p2-p1)>2){ p1=p1+1; p2=p2-1; }else if((p2-p1)==2){ if(arr[p1+1]>key){ p2=p2-2; }else{ p1=p1+1; p2=p2-1; } }else{ p2=p2-1; } } } quickSort(arr,start,p2); quickSort(arr,p2+1,end); }