#include
#include
int num[10]={1,5,2,6,7,3,8,0,4,22};
void swap(int* a,int*b)
{
int tmp;
tmp=*b;
*b=*a;
*a=tmp;
}
void sort(int* s_num,int left,int right)
{
if(left>=right)
return;
int mid_elm=(left+right)/2;
swap(&s_num[left],&s_num[mid_elm]);
int last=left;
for(int i=left+1;i<=right;i++)
if(s_num[i]
{
swap(&s_num[i],&s_num[++last]);
}
swap(&s_num[last],&s_num[left]);
sort(s_num,left,last-1);
sort(s_num,last+1,right);
}
int main()
{ int num[7]={0,2,13,4,7,1,3};
sort(num,0,6);
for(int i=0;i<7;i++)
printf("num is %d ",num[i]);
}
以下是标准的方法,分别从后向前和从前向后搜索
void sort(int* s_num,int left,int right)
{
int sto_s_num=s_num[left];
int sav_hole=left;
int sav_r=right;
int sav_l=left;
if(left<0 || right<=0 ||left>right)
return;
while(left!=right)
{
while(s_num[right]>sto_s_num)
{
right--;
if(right==left)
goto over;
}
swap(&s_num[right],&s_num[sav_hole]);
sav_hole=right;
while(s_num[left]<sto_s_num)
{
left++;
if(right==left)
goto over;
}
swap(&s_num[left],&s_num[sav_hole]);
sav_hole=left;
}
over:
sort(s_num,sav_l,sav_hole-1);
sort(s_num,sav_hole+1,sav_r);
}