归并排序算法
来源:互联网 发布:java常用设计模式详解 编辑:程序博客网 时间:2024/06/06 00:03
使用数组结构,自顶向下算法。
//将分治的两端按大小次序填入临时数组,最后把临时数组拷贝到原始数组中//lPos到rPos-1为一端,rPos到rEnd为另一端void Merge(int a[], int tmp[], int lPos, int rPos, int rEnd){ int i, lEnd, NumElements, tmpPos; lEnd = rPos - 1; tmpPos = lPos; //从左端开始 NumElements = rEnd - lPos + 1; //数组长度 While(lPos <= lEnd && rPos <= rEnd) { if(a[lPos] <= a[rPos]) //比较两端的元素值 tmp[tmpPos++] = a[lPos++]; //把较小的值放在tmp临时数组 else tmp[tmpPos++] = a[rPos++]; } //到这里,左端或者右端只能有一端还可能含有剩余元素 while(lPos <= lEnd) //把左端剩余的元素放入tmp tmp[tmpPos++] = a[lPos++]; while(rPos <= rEnd) //把右端剩余的元素放入tmp tmp[tmpPos++] = a[rPos++]; for(i = 0; i < NumElements; i++, rEnd--) a[rEnd] = tmp[rEnd]; //把临时数组拷贝到原始数组}void msort(int a[], int tmp[], int low, int high){ if(low >= high) //结束条件,原子结点return return; int middle = (low + high)/2; //计算分裂点 msort(a, tmp, low, middle); //对子区间[low, middle]递归做归并排序 msort(a, tmp, middle + 1; high);//对子区间[middle + 1, high]递归做归并排序 Merge(a, tmp, low, middle + 1, high); //组合,把两个有序区间合并为一个有序区}void merge_sort(int a[], int len){ int* tmp = NULL; tmp = new int[len]; //分配临时数组 if(tmp != NULL) { msort(a, tmp, 0, len - 1); //调用msort归并排序 delete []tmp; //释放临时数组内存 }}
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- PicoBlaze程序仿真调试及在线快速调试说明
- Zigbee技术开发一 设置NV_RESTORE
- dede如何对描述字符description限制字数
- ReactiveMongo 学习笔记
- UVa 10010 Where's Waldorf?
- 归并排序算法
- qq与邮箱的最大区别是什么
- [kuangbin带你飞]专题六 最小生成树
- 关于finally的几个问题
- Oracle海量数据导入MongoDB 采用JAVA反射-Penghao
- iOS UITableViewCell重用问题
- Spark安装
- 做了三年开发 到现在才完美解决了弹键盘的问题
- qt 选择文件夹下的文件复制