经典排序算法——归并排序
2016-03-13 13:16
330 查看
对于一个int数组,请编写一个归并排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,2,3,3,5]
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
class MergeSort { public: int* mergeSort(int* A, int n) { if(A==NULL||n<2) return A; process(A,0,n-1); return A; } void process(int* A,int left,int right) { if(left>=right) return; int mid=left+(right-left)/2; //划分左右 process(A,left,mid); process(A,mid+1,right); //合并左右 merge(A,left,mid,right); } void merge(int* A,int left,int mid,int right) { int* temp=new int[right-left+1];//临时数组 int l=left,r=mid+1; int k=0; while(l<=mid && r<=right) //临时数组选取左、右子数组中较小的 { if(A[l]<A[r]) temp[k++]=A[l++]; else temp[k++]=A[r++]; } while(l<=mid) temp[k++]=A[l++];//将剩余的数直接复制到临时数组中 while(r<=right) temp[k++]=A[r++]; //将临时数组放回原数组相应位置 for (int i = 0; i <right-left+1; i++) { A[left + i] = temp[i]; } delete[] temp; } };
相关文章推荐
- hdoj--2186--悼念512汶川大地震遇难同胞——一定要记住我爱你(模拟水题)
- 《构建之法》阅读笔记02
- caffe 输出重定向, 双重输出重定向
- MySQL数据库总结(6)列类型及列的增删改
- Java 二维数组实现杨辉三角
- Annotation--java注解
- loadrunner Fast learning First Day
- BZOJ_P2152 聪聪可可(点分治)
- 杭电oj 2012 素数判定
- hdoj--2073--无限的路(数学规律)
- 剑指offer:数组中只出现一次的数字
- [PHP]向类中动态添加数据
- 那些年我们开发的应用程序
- Activity生命周期解说
- 实验三:gdb跟踪调试内核从start_kernel到init进程启动
- hdoj--2073--无限的路(数学规律)
- 模块化-MVC与MVVM
- BZOJ_P1475 方格取数(网络流)
- Problem D: C语言习题 矩阵元素变换
- JavaScript事件