归并排序
2016-05-03 21:24
337 查看
思想不多说,直接上一张图:(图是盗取的奥,快闭馆了,的抓紧时间):
![](http://img.blog.csdn.net/20160503212156654?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
先分解,排序,然后合并,一下是代码:
先分解,排序,然后合并,一下是代码:
#pragma once //合并两个分组的 void MergeSection(int *a, int *tmp, int begin1, int end1, int begin2, int end2) { int index = 0; while (begin1 <= end1 && begin2 <= end2) //两个子集合并 { if (a[begin1] <= a[begin2]) //把小的放在index = 0的位置 以此类推 tmp[index++] = a[begin1++]; else tmp[index++] = a[begin2++]; } //还少几种情况,如下 while (begin1 <= end1) { tmp[index++] = a[begin1++]; } while (begin2 <= end2) { tmp[index++] = a[begin2++]; } } //归并排序 void _MergeSort(int *a, int *tmp, int left,int right) { assert(a); if (left >= right) { return; } int mid = left + (right - left) / 2; _MergeSort(a, tmp,left,mid); _MergeSort(a, tmp, mid+1,right ); MergeSection(a,tmp,left,mid,mid+1,right); for (int i = 0; i < (right - left + 1); ++i) { a[left+i] = tmp[i]; } } void MergeSort(int *a, int size) { int *tmp = new int[size]; //相当于第三方数组 用来合并 memset(tmp,0,sizeof(int)*size); _MergeSort(a, tmp, 0, size - 1); delete[] tmp; }赐教!
相关文章推荐
- 贪心算法☞最优服务次序&多处服务最优次序
- 【代码】SQLHelper
- 奇数-函数实现
- 【 GDOI2016 爆零记】 AFO
- Android获取LayoutInflater的一种方法
- 【代码】字符串按指定长度剪切
- 好文收藏(持续更新)
- ssh整合出错——Duplicate class/entity mapping com.hl.fleetingtime.model.User
- 墙上时钟时间 ,用户cpu时间 ,系统cpu时间内,核态和用户态的区别
- 提取classes中properties的value(JAVA)
- HTML第七章案例分析
- 【代码】C#导出Excel
- 网页设计趋势:方格堆叠式排版
- 【代码】VB导出Excel
- stat 函数详解
- stat 函数详解
- stat 函数详解
- stat 函数详解
- stat 函数详解
- stat 函数详解