本人根据书上的三数中值快速排序修改
struct _leftright
{
int left;
int right;
};
inline void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void Qsort(int A[],int left,int right)
{
int i,j;
int k=0;
_leftright *record=0;
record=(_leftright*)malloc((right-left+1)*sizeof(_leftright));
if(!record)
{
printf("malloc fail!\n");
return;
}
for(int m=-1;0==k||m<k;m++)
{
if(-1!=m)
{
left=record[m].left;
right=record[m].right;
}
if(left+3<=right)
{
int center=(left+right)/2;
if(A[left]>A[center])
swap(&A[left],&A[center]);
if(A[left]>A[right])
swap(&A[left],&A[right]);
if(A[center]>A[right])
swap(&A[center],&A[right]);
swap(&A[center],&A[right-1]);
i=left,j=right-1;
while(1)
{
while(A[++i]<A[right-1]);
while(A[--j]>A[right-1]);
if(i<j)
swap(&A[i],&A[j]);
else
break;
}
swap(&A[i],&A[right-1]);
record[k].left=left;
record[k++].right=i-1;
record[k].left=i+1;
record[k++].right=right;
}
else
{
for(i=left;i<right;i++)
for(j=i+1;j<=right;j++)
{
if(A[i]>A[j])
{
swap(&A[i],&A[j]);
}
}
}
}
free(record);
}