/***************************快速排序:源于《算法导论》**********************************/
/*
**编译命令gcc inputfile -o outputfile
*/
#include
#include
#include
#define ERR_MALLOC 1
#define ARRAY_NUM 1024
inline void exchange(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int partion(int *array,int p,int r)
{
int x=array[r];/*用于比较,以这个数为分界点*/
int i=p-1,j=p;
for(j=p;j<=r-1;j++){ /*j指向当前比较的字符*/
if(array[j]<=x){
i=i+1; /*i指向比x小的最后一个数值的索引*/
exchange(&array[i],&array[j]);/*将比x小的值和比x大的值交换*/
}
}
exchange(&array[i+1],&array[j]); /*将arrary[r]放置于恰当的位置*/
return (i+1);
}
void quicksort(int *array,int p,int r)
{
int q=0;
if(p q=partion(array,p,r);
quicksort(array,p,q-1);
quicksort(array,q+1,r);
}
}
int main(int argc,char *argv[])
{
int *array=NULL;
int i;
array=(int*)malloc(sizeof(int)*ARRAY_NUM);
memset((void*)array,0,ARRAY_NUM);
#ifdef DEBUG
printf("argc=%d\n",argc);
#endif
if(NULL==array){
printf("malloc err!\n");
return ERR_MALLOC;
}
if((argc-1)>ARRAY_NUM){
printf("too much numbers!\n");
}
for(i=1;i<=(argc-1);i++){
array[i-1]=atoi(argv[i]);
}
#ifdef DEBUG
for(i=0;i<(argc-1);i++){
printf("%d ",array[i]);
}
#endif
quicksort(array,0,(argc-1)-1);
for(i=0;i<(argc-1);i++){
printf("%d ",array[i]);
}
if(array!=NULL){
free(array);
}
}
阅读(1494) | 评论(0) | 转发(0) |