mergesort
2015-10-22 12:19
369 查看
// // main.cpp // mergesort // // Created by lingnan on 10/21/15. // Copyright (c) 2015 lingnan. All rights reserved. // #include <iostream> using namespace std; void merge(int arr[], int left, int mid, int right){ int n1 = mid - left +1; int n2 = right - mid; int a1[n1], a2[n2]; for(int i=0; i<n1; i++){ a1[i] = arr[left+i]; } for(int j=0; j<n2; j++){ a2[j] = arr[mid+j+1]; } int c_a= 0; int c_b = 0; int c = left; while(c_a <n1 && c_b <n2){ if(a1[c_a] <= a2[c_b]){ arr[c++] = a1[c_a++]; }else{ arr[c++] = a2[c_b++]; } } while(c_a <n1){ arr[c++] = a1[c_a++]; } while(c_b <n2){ arr[c++] = a2[c_b++]; } } void mergesort(int arr[], int left, int right){ if(left < right){ int mid = (right - left)/2 + left; mergesort(arr, left, mid); mergesort(arr, mid+1, right); merge(arr, left, mid, right); } } void printArray(int arr[], int n){ cout<<"The final result after mergesort is:"<<endl; for(int i=0; i<n;i++) { cout<< arr[i] <<" "; } } int main(int argc, const char * argv[]) { int arr[] = {3,21,5,3,2,5,3,6,454,7,3,63,4,645}; int n = sizeof(arr)/sizeof(arr[0]); mergesort(arr, 0, n-1); printArray(arr, n); return 0; }
相关文章推荐
- 有向无环图的拓扑排序
- 双网卡绑定后bond是eth3的网卡信息
- 第一个Linux下的批处理文件
- 行内元素和块级元素
- 新浪微博学习的知识点
- 第8周项目3-顺序串算法
- oracle hanganalyze工具的使用
- 几种排序算法的总结(java版)
- Hibernate 一对多 保存和修改数据
- Eclipse中R文件不能自动生成
- hdu 4764 Stone
- 一个很漂亮的美食下拉刷新:BeautifulRefreshLayout
- 图像公司
- TFS的使用
- 1022 词法分析程序
- Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法
- awakeFromNib和 viewDidLoad的使用时机
- 架构师最怕程序员知道的10件事
- Pearson Correlation Score
- 自己编写的一个简单的计算器