归并排序 分治法
2016-01-08 15:45
197 查看
核心算法
自顶向下
自下向顶
void m_merge(int *a,int start,int mid,int finish) { int i=start; int j=mid+1; int cache[MAX_LEN]= {0}; for(int k=start; k<=finish; k++) { cache[k]=a[k]; } for(int k=start; k<=finish; k++) { if(i>mid ) { a[k]=cache[j]; j+=1; } else if(j>finish) { a[k]=cache[i]; i+=1; } else if(cache[i]>cache[j]) { a[k]=cache[j]; j+=1; } else { a[k]=cache[i]; i+=1; } } }
自顶向下
void merge_sort(int *a,int start,int finish) { if(start>=finish) return; int mid= (start+finish)/2; merge_sort(a,start,mid); merge_sort(a,mid+1,finish); m_merge(a,start,mid,finish); }
自下向顶
int m_min( int a,int b) { if(a>b) return b; return a; } void merge_sort(int *a,int start,int finish) { int length=finish-start+1; for(int i=1; i<length; i=i+i) { for(int j = start; j<finish-i; j+=i+i) { m_merge(a,j,j+i-1,m_min(j+i+i-1,finish)); } } }
相关文章推荐
- android版本兼容问题
- 用函数式的 Swift 实现图片转字符画的功能
- DropDownList 文件WebForm11
- 字典放入数组中
- 0108 清空上一次的东西
- 更简单的AutoLayout 之SDAutoLayout
- Android Fragment详解(三):实现Fragment 界面
- regetnIesreveR.7
- graphx操作实例04-使用mapReduceTriplets、mapEdges、mapVertices修改属性
- 字典的排序
- linux下修改/dev/shm tmpfs文件系统大小
- c# 百度api语音识别
- mysql索引总结----mysql 索引类型以及创建
- 关于安装Gynamotion遇到问题
- 常用正则表达式
- 设置简单的定时
- 性能测试之tomcat线程池设置原理
- namespace关键字和__NAMESPACE__常量
- mysql 下 计算 两点 经纬度 之间的距离
- android webview性能优化