对数组进行归并排序
2015-09-21 16:36
316 查看
代码如下:
下列的代码有几处trick。第一:在整个算法流程中,我们只分配了一次动态数组。第二,tmpArray在这里起到的作用是临时存储merge的结果,merge之后,需要把tmpArray里面的元素拷贝回arr。3,如果left==right,则我们认为arr已经有序了。
下列的代码有几处trick。第一:在整个算法流程中,我们只分配了一次动态数组。第二,tmpArray在这里起到的作用是临时存储merge的结果,merge之后,需要把tmpArray里面的元素拷贝回arr。3,如果left==right,则我们认为arr已经有序了。
void merge(int arr[], int tmpArray[], int lPos, int rPos, int rightEnd) { int i, leftEnd, NumElements, tmpPos; leftEnd = rPos-1; tmpPos = lPos; NumElements = rightEnd-lPos+1; while (lPos<=leftEnd&&rPos<=rightEnd) { if (arr[lPos]<=arr[rPos]) { tmpArray[tmpPos++] = arr[lPos++]; } else { tmpArray[tmpPos++] = arr[rPos++]; } } while (lPos<=leftEnd) { tmpArray[tmpPos++] = arr[lPos++]; } while (rPos<=rightEnd) { tmpArray[tmpPos++] = arr[rPos++]; } for (i=0; i<NumElements; i++, rightEnd--) { arr[rightEnd] = tmpArray[rightEnd]; } } void mSort(int arr[], int tmpArray[], int left, int right) { int center; if (left<right) { center = (left+right)/2; mSort(arr, tmpArray, left, center); mSort(arr, tmpArray, center+1, right); merge(arr, tmpArray, left, center+1, right); } } void mergeSort(int arr[], int n) { int* tmpArray = new int ; mSort(arr, tmpArray, 0, n-1); delete[] tmpArray; } int main() { int arr[10] = {-1, 9, 38, 17, 16, 45, 4, 3, 2, 91}; mergeSort(arr, 10); for (int i=0; i<10; i++) { cout << arr[i] << " "; } }
相关文章推荐
- oracle 12c 三学习 pdb 可插拔测试
- .NET Web后台动态加载Css、JS 文件,换肤方案
- MVC学习笔记--跟小静学MVC相关语法特性小补习
- SqlServer中解析字符串的表值函数
- POJ 2533 Longest Ordered Subsequence (DP动态规划)
- hdfs rack机架感知配置
- 数据结构实践——顺序表应用(2)
- 第3周项目4 顺序表应用
- 第四周 项目1-建立单链表
- 第三周项目1-顺序表的基本运算
- 安全快速下载Xcode的姿势
- 你还在用开源控件的下拉刷新吗?你out了,试一试官方的下拉刷新SwipeRefreshLayout
- iOS 支付宝和微信支付方式集成详解+(demo)
- (转)新ITC提交APP常见问题与解决方法(Icon Alpha,Build version,AppIcon120x120)(2014-11-17)
- 数据流重定向
- 关于驰骋工作流引擎ccbpm对bpmn2.0的支持
- 记录 android 开发的一个 "面试" 问题
- Web app root system property already set to different value 错误原因及解决
- centos7 开机/etc/rc.local 不执行的问题
- PAT研究生入学考试2015.03第四题Build A Binary Search Tree (30) 题解