思路:将首位作为中心轴,比首位大的数放在中心轴右边,比首位小的数放在中心轴左边,第一次结束后再递归左右两边。
#include <stdio.h>
void Quicksort(int arry[],int L,int R){
if(L>=R)
return ;
int left=L,right=R;
int flag = arry[left];
while(left<right){
while(left<right&&arry[right]>=flag)
right--;
if(left<right)
arry[left]=arry[right];//此时R所指的数比中心轴小,将R所指的数赋值给L所指的位置
while( left<right&&arry[left]<=flag)
left++;
if(left<right)
arry[right]=arry[left];//此时L所指的数比中心轴大,将L所指的数赋值给R所指的位置
if( left>=right)
arry[left ]=flag;//将中心轴放到L,R重合的位置
}
Quicksort(arry ,L, right-1) ;//对左子序列递归
Quicksort(arry ,right+1,R);//对右子序列递归
}
int main()
{
int a[]={3,2,5,7,9};
Quicksort(a,0,4);
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
return 0;
}