排序算法(八)归并排序
来源:互联网 发布:linux命令文件拷贝到 编辑:程序博客网 时间:2024/06/06 09:27
归并排序是利用归并的思想将一组数据进行排序。它是一种外部排序(可以对那些在磁盘上的大数据进行排序)。下边进行图解。
【代码实现】
//归并排序void Merge(int* a,int begin,int mid,int end,int tmp[]){ int begin1 = begin; int end1 = mid; int begin2 = mid+1; int end2 = end; int index = 0; int i = 0; while(begin1 <= end1 && begin2 <= end2) { if(a[begin1] < a[begin2]) { tmp[index++] = a[begin1++]; } if(a[begin2] < a[begin1]) { tmp[index++] = a[begin2++]; } } //应该有一个区间没有拷贝完成 while(begin1 <= end1) { tmp[index++] = a[begin1++]; } while(begin2 <= end2) { tmp[index++] = a[begin2++]; } //将tmp数组的内容拷贝到a数组 while(i < index) { a[begin + i] = tmp[i]; ++i; }}void MergeSort(int* a,int begin,int end,int tmp[]){ assert(a && size > 0); if(begin < end) { int mid = begin + (end - begin)/2; MergeSort(a,begin,mid,tmp); MergeSort(a,mid + 1,end,tmp); Merge(a, begin, mid, end, tmp); }}
时间复杂度:O(N*logN).递归的次数就是logN次,每次遍历N次。
空间复杂度:O(N + logN)。递归深度是logN,辅助的大小为N的tmp数组。关于对磁盘上的数据的排序,前边的文章已经分享过~~可以自行查看。
0 0
- Java排序算法(八):归并排序
- 排序算法(八) 归并排序
- 排序算法(八)归并排序
- 排序算法八:归并排序
- 排序算法八:归并排序
- 算法八之归并排序
- 算法八之归并排序
- 浅析各类排序算法(八) 归并排序
- 算法相关——Java排序算法之归并排序(八)
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- Hawq学习笔记 --- postgresql 数据库导入导出
- 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」
- 微助手 2016.11.16号正式上市
- python 第三方模块
- 从0开始学习 GitHub 系列之「05.Git 进阶」
- 排序算法(八)归并排序
- 两数之和 (一)
- dcos里面跑jenkins的问题
- 每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)
- MYSQL escape用法
- AndroidStudio打包Apk java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader:couldn't find "lib
- 触屏事件传递机制disPatchTouchEvent onInterceptTouchEvent onTouchEvent
- 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」
- leetcode 判断数独是否合法