merge sort
来源:互联网 发布:lamp一键安装包centos 编辑:程序博客网 时间:2024/05/22 04:27
//Merge sort BY ZHAODW#include<stdio.h>#define N 10#define SENTINEL 1000int source[N] = {1,9,2,8,3,7,4,6,5,10};int L[N] = {0};int R[N] = {0};int merge(int* s,int p,int q,int r){if(p == q) return 0;if(q - p > 1){ int pre = p + (r - p) / 2; int aft = r + (q - r + 1) / 2; merge(s,p,r,pre); merge(s,r+1,q,aft);}int i = p;for(;i <= r;i++ ) L[i-p] = s[i];L[i - p] = SENTINEL;i = r + 1;for(;i <= q;i++) R[i - r - 1] = s[i];R[i -r -1] = SENTINEL;i = 0;int j = 0;int k = p;for(;k <= q;k++){ if(L[i] <= R[j]) {s[k] = L[i];i++; } else {s[k] = R[j]; j++; }}return 0;}int main(){ int p = 0,q = N - 1; int r = p + (q - p) / 2; merge(source,p,q,r); int i = 0; for(;i < N;i++)printf("%d ",source[i]); printf("\n"); return 0;}
merge sort 源码
递归式为
T(n) = 2T(n/2) + O(n)
于是根据主方法,合并排序的时间复杂度为
O(nlgn)
合并排序没有最好和最差情况,同时需要额外的空间辅助排序
注意合并时候的哨兵 SENTINEL :)
解决递归式复杂度的主方法接下来介绍
- Merge Sort
- Merge sort
- merge sort
- merge sort
- merge sort
- Merge Sort
- merge sort
- Merge Sort
- Merge Sort
- merge sort
- Merge Sort
- Merge sort
- Merge-sort
- Merge Sort
- Merge sort
- Merge Sort
- Merge-Sort
- merge sort
- centos(8) wget resolving failed 解决方法
- CUDA 高亮显示设置
- ORA-00600: 内部错误代码,参数: [qctcte1], [0], [], [], [], [], [], []
- 关于时间的计算方式
- Delphi调试看变量值
- merge sort
- 检验欧拉定义是否满足微分律
- clickonce 发布部署后关于皮肤(ssk) 和帮助文档(chm)的问题
- mysql 存储过程中 使用变量做表明[学习记录]
- template class static member initialize
- Android应用APK获得/data目录的读写权限
- android 导入文件到sdcard报错。。。Failed to push selection: Read-only file system
- 警惕UNIX下的LD_PRELOAD环境变量
- JQuery 高亮显示文本