Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335408
  • 博文数量: 72
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-05 16:10
文章分类

全部博文(72)

文章存档

2010年(5)

2009年(14)

2008年(53)

分类: C/C++

2008-10-20 09:17:58

#include
#include
static void merge(int array[], int p, int q, int r)
{
        int i, k;
        int begin1, end1, begin2, end2;
        int *temp=(int *)malloc((r-p+1)*sizeof(int));
        begin1=p;
        end1=q;
        begin2=q+1;
        end2=r;
        k=0;
        while((begin1<=end1)&&(begin2<=end2))
        {
                if(array[begin1]                {
                        temp[k]=array[begin1];
                        begin1++;
                }
                else
                {
                        temp[k]=array[begin2];
                        begin2++;
                }
                k++;
        }
        while(begin1<=end1)
        {
                temp[k++]=array[begin1++];
        }
        while(begin2<=end2)
        {
                temp[k++]=array[begin2++];
        }
        for(i=0; i<(r-p+1); i++)
                array[p+i]=temp[i];
        free(temp);
}

void merge_sort(int array[], unsigned int first, unsigned int last)
{
        int mid=0;
        if(first < last)
        {
                mid = (first + last)/2;
                merge_sort(array,first,mid);
                merge_sort(array,mid+1,last);
                merge(array,first,mid,last);
        }
}

void printarray(int *a,int n)
{
        int i;
        for(i=0; i                printf("%3d",*(a+i));
        printf("\n");
}

int main(void)
{
        int a[10]={1,5,2,3,0,7,4,9,6,8};
        merge_sort(a,0,9);
        printarray(a,10);
        return 0;
}


阅读(708) | 评论(0) | 转发(0) |
0

上一篇:插入排序

下一篇:做人27条

给主人留下些什么吧!~~