归并排序

本文是转载自http://blog.youkuaiyun.com/ivan_zgj/article/details/51446520,只是做了一些描述上的修改。

归并排序是分治思想的一种应用,把复杂大型的问题切分成若干个小问题,在进行一一解决然后进行合并,最后把复杂的问题解决。
先看一个简单的排序程序,这个程序是对两个有序数组进行合并,合并后的数组依然是有序的数组:

int *merge(const int *arry1,const int *arry2,const int len1,const int len2){
    int *result = (int*)malloc(sizeof(int)*(len1+len2));
    int *ptr = result;
    int i,j;
    i = 0;
    j = 0;
    while(i<len1&&j<len2){
        if(*a1<*a2){
            *ptr++ = *arry1++;
            i++;
        }
        else{
            *ptr++ = *arry2++;
            j++;
        }
    }
    while(i<len1){
        *ptr++ = *arry1++;
        i++;
    }
    while(j<len2){
        *ptr++ = *arry2++;
        j++;
    }
    return result;
}

这里合并的方法非常简单,就是对两个数组进行遍历,将较小的元素插入新数组当中,因为a1,a2数组原本就是有序的所以这样合并得到的结果依然是有序的,上述代码是按照从小到大的顺序。
假设两个数组分别是{0,1,2,3},{1,3,4,5},那么上述合并过程可以描述如下:

result = {0}, i=1 , j=0
result = {0,1}, i=1 , j=1
result = {0,1,1}, i= 2 , j=1
result = {0,1,1,2},i=3 , j=1
result = {0,1,1,2,3},i=4 , j=1

此时跳出第一个while循环,然后有j < n2,进入while(j < n2)循环

result = {0,1,1,2,3,3},i=4 , j=2
result = {0,1,1,2,3,3,4},i=4 , j=3
result = {0,1,1,2,3,3,4,5},i=4 , j=4

程序结束,得到一个新的数组 {0,1,1,2,3,3,4,5}。
归并排序就是基于上述算法,利用分治的思想实现的。假设要对8个元素进行归并排序,其归并过程如其归并树所示:
这里写图片描述
其实归并排序是一个自底向上的过程,例如上图中的8元素数组,其先将数组划分成单元素,然后相邻两个元素进行合并,得到4个新的有序数组,然后继续相邻两个数组进行合并,得到两个新的有序数组,最后再合并得到数组排序后的结果。上图的归并树的每一层的合并过程,不管是多少组数组进行两两合并,其过程也只是遍历一次原数组的全部元素而已,故其时间复杂度为O(n),而树的高度为lg(n),所以归并排序的时间复杂度为O(nlg(n))。

void merge_sort(int *arry,const int len){
    int *result,i;
    if(len<=1){
        return;
    }
    merge_sort(arry,len/2);
    merge_sort(arry+len/2,len-len/2);
    result = merge(arry,arry+len/2,len/2,len-len/2);
    for(i=0;i<len;i++){
        *arry++ = *(result+i);
    }
    free(result);
}

由于归并排序是一种变址排序,所以上述代码在归并完成后需要对原数组重新赋值。其实如果没有必要,也可以不这样做,直接返回排序后的数组即可。

内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值