Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191813
  • 博文数量: 45
  • 博客积分: 1577
  • 博客等级: 上尉
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-01 16:40
个人简介

xxx

文章分类

全部博文(45)

文章存档

2012年(4)

2011年(14)

2010年(8)

2009年(19)

我的朋友

分类: C/C++

2011-08-26 21:48:46

/***************************快速排序:源于《算法导论》**********************************/
/*
**编译命令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) |
给主人留下些什么吧!~~