#include <stdio.h>
#include <stdlib.h>
void printA(int a[],int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int* partition(int a[],int p,int r)
{
int *qt=(int*)malloc(2*sizeof(int));
int i=p-1,j,k=p-1,x=a[r];
for(j=p;j<r;j++)
{
/*printf("i=%d,",i);
printf("k=%d,",k);
printf("j=%d\n",j);*/
if(a[j]<=x)
{
i++;
if(a[j]<x)
{
k++;
int temp=a[j];
a[j]=a[k];
a[k]=temp;
}
if(a[j]==x)
{
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
//printA(a,8);
}
int temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;
qt[0]=k+1;
qt[1]=i+1;
return qt;
}
void quickSort(int a[],int p,int r)
{
if(p<r)
{
int *qt=partition(a,0,7);
if(qt[0]>p)
{
partition(a,p,qt[0]-1);
}
if(qt[1]<r)
{
partition(a,qt[1],r);
}
}
}
int main()
{
int a[8]={10,5,6,27,6,5,11,6};
quickSort(a,0,7);
printA(a,8);
getchar();
}
算法导论 思考题 7-2
最新推荐文章于 2019-03-23 22:50:08 发布