博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序的实现过程
阅读量:2384 次
发布时间:2019-05-10

本文共 1271 字,大约阅读时间需要 4 分钟。

首先时间复杂度上:

logn*n

在这个过程中,一共要合并logn次的有序数列,而获取一个有序数列的时间复杂度是n,在获取的过程中,因为其实数列的原始排列顺序会影响这个过程的时间复杂度。比如是只比较1次就可以(后面数列的第一个元素就比前面数列的最后一个元素要大),那么此时比较一次就可以了。还是说需要max(n,m)次才可以将后面数列中的一个元素排列好,那么第二个元素也有可能是需要比较这么多次数。但是在归并排序中,将这个过程看成是O(n),所以可以说,归并排序的时间复杂度跟数列的初始状态没有关系。

void merge(int arr[], int low, int mid, int high){    int i, k;    int *tmp = (int *)malloc((high-low+1)*sizeof(int));    //申请空间,使其大小为两个    int left_low = low;    int left_high = mid;    int right_low = mid + 1;    int right_high = high;    for(k=0; left_low<=left_high && right_low<=right_high; k++){  // 比较两个指针所指向的元素        if(arr[left_low]<=arr[right_low]){            tmp[k] = arr[left_low++];        }else{            tmp[k] = arr[right_low++];        }    }    if(left_low <= left_high){  //若第一个序列有剩余,直接复制出来粘到合并序列尾    //memcpy(tmp+k, arr+left_low, (left_high-left_low+l)*sizeof(int));    for(i=left_low;i<=left_high;i++)        tmp[k++] = arr[i];    }    if(right_low <= right_high){    //若第二个序列有剩余,直接复制出来粘到合并序列尾    //memcpy(tmp+k, arr+right_low, (right_high-right_low+1)*sizeof(int));        for(i=right_low; i<=right_high; i++)            tmp[k++] = arr[i];    }    for(i=0; i
> 1); merge_sort(arr, first, mid); merge_sort(arr, mid+1,last); merge(arr,first,mid,last); } return;}

 

转载地址:http://ywbab.baihongyu.com/

你可能感兴趣的文章
linux之强大的find命令
查看>>
python使用变量操作mysql语句
查看>>
linux bridge 网桥详解
查看>>
ceph&openstack发展前景
查看>>
Mysql之主键、外键和各种索引
查看>>
ceph&云计算
查看>>
python main()函数 name == ‘main’:
查看>>
flask一个基本的http响应流程
查看>>
linux常见的文件及目录操作12个命令
查看>>
挂载ceph的rbd块存储作为本地磁盘块
查看>>
ceph的块设备的两种使用方式及代码示例
查看>>
查看python中模块的所有方法
查看>>
ceph对象存储的配置与S3、swift接口的使用
查看>>
python通过librados库通过底层的rados操作ceph的对象存储和块存储
查看>>
在客户端使用python来调用boto S3 API来操作librados库
查看>>
ceph存储数据的详细流程(CRUSH)
查看>>
linux内核模块详解
查看>>
ceph集群的扩展(centos7环境)
查看>>
linux命令之top(查看cpu、内存等负载)
查看>>
linux_详解find命令
查看>>