#include <stdlib.h>
#include <stdio.h>
void quicksort(int *arr,unsigned int len)
{
if(len < 2) return;//如果子序列小于两个元素则不用排序
int l = 0;//左下标
int r = len-1;//右下标
int tmp = arr[0];//选取最左边数为中心轴
int flag = 2;//标志位 设置默认从右边开始
while(l<r)
{
if(flag == 2)//右区间
{
if(arr[r] >= tmp )
{
r--;
continue;
}
arr[l] = arr[r];
l++;
flag = 1 ;
continue;
}
if(flag == 1)//左区间
{
if(arr[l] <= tmp)
{
l++;
continue;
}
arr[r] = arr[l];
r--;
flag = 2;
continue;
}
}
arr[l] = tmp;
//arr[r] = tmp; 也可以
quicksort(arr,l);//左区间排序
quicksort(arr+l+1,len-l-1);//右区间排序
}
int main(int argc,char *argv[])
{
int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
int len=sizeof(arr)/sizeof(int);
quicksort(arr,len); // 调用插入排序函数对数组排序。
// 显示排序结果。
int yy;
for (yy=0;yy<len;yy++)
printf("%2d ",arr[yy]);
printf("\n");
return 0;
}