9种排序算法性能之比较之----归并排序

(五) 归并排序

实现代码:

/*!

 * implemented by mengzhaofeng
 */
void merge_sort(int *data, int left, int right, int *temp)
{
    if(left == right) return ;
    if(right-left == 1) {
        if(data[left] > data[right]) {
            int tmp = data[left];
            data[left] = data[right];
            data[right] = tmp;
        }
        return ;
    }
    int m = ((left + right) / 2);
    merge_sort(data, left, m, temp);
    merge_sort(data, m+1, right, temp);
    //merge
    int i = left;
    int k = left;
    int j = m + 1;
    while(i <= m) {
        if(j <= right) {
            if(data[i] < data[j]) {
                temp[k++] = data[i++];
            } else {
                temp[k++] = data[j++];
            }
        } else break;
    }
    while(i <= m) {
        temp[k++] = data[i++];
    }
    while(j <= right) {
        temp[k++] = data[j++];
    }
    i = left;
    j = left;
    while(i <= right) {
        data[i++] = temp[j++];
    }
}
/*!
 * 归并排序
 */
double MergeSort(int *data, int size)
{
    double res = 0;
    boost::scoped_array<int> temp(new int[size]);
    //EClock<> Ek;
    merge_sort(data, 0, size-1, temp.get());
    //res = Ek.microsecond();
    return res;
}

测试结果:

                单位:us

100.301869933
200.603739867
502.113089533
1004.528049
2009.659837866
50025.05520446
100055.54406773
2000115.3143145
3000238.1753774
4000252.6651342
5000328.1326175
6000399.3739218
7000469.1058764
8000520.7256349
9000602.5323869
10000719.9597909
200001446.56072
500003970.495233
1000008842.374086
20000019943.94275
50000051415.99639
80000083584.16209
1000000105334.1927
变化趋势:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值