Chinaunix首页 | 论坛 | 博客
  • 博客访问: 904467
  • 博文数量: 73
  • 博客积分: 2689
  • 博客等级: 少校
  • 技术积分: 897
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-07 19:39
个人简介

一个有目标,为自己的未来努力奋斗的人

文章分类
文章存档

2015年(9)

2014年(2)

2013年(6)

2012年(11)

2011年(33)

2010年(12)

分类: C/C++

2011-04-10 02:38:16

这是基于归并排序算法的C源代码,对于那些正在找工作的dd、mm们是很有帮助的,特将其共享与此,以求与你共奋进!

void Merge(int left, int mid, int right, int *array_A, int *array_B) {
    int i = left;
    int j = mid + 1;
    int k = left;

    while(i <= mid && j <= right)
        array_B[k++] = (array_A[i] > array_A[j]) ? array_A[j++] : array_A[i++];

    while (i <= mid)
        array_B[k++] = array_A[i++];
    while (j <= right)
        array_B[k++] = array_A[j++];    
}

void Mpass(int *array_A, int *array_B ,int len, int n) {
    int i = 0;

    while (i < (n - (len * 2) + 1)) {
        Merge( i, i + len -1, i + len * 2 - 1, array_A, array_B);
        i += len*2;     
    }

    if (i + len < n)
        Merge(i, i + len - 1, n-1, array_A, array_B);
    else {
        for (; i<n ;i++)
            array_B[i] = array_A[i];
    }
}

void merge_sort(int *array, int n) {
    int len = 1;
    int *array_A = array;
    int array_B[n];

    while(len < n) {
        Mpass(array_A, array_B, len, n);
        len *= 2;
        Mpass(array_B, array_A, len, n);
        len *= 2;
    }
}


完整程序代码可以在这里下载:
文件:random-gen-merge-sort-bin-search.c.tar.gz
大小:1KB
下载:下载
阅读(726) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~