归并排序MergeSort
来源:互联网 发布:淘宝要食品流通许可证 编辑:程序博客网 时间:2024/06/08 02:47
如何将两个已排序的序列归并[合并]成一个,使合并后的序列依旧有序[Merge]
条件:两升序序列A [begin, end] 序列B[front, back]
准备:
- 定义一临时空间C[0, size(A) + size(B) - 1]
- 定义三变量i = begin,j = front, k = 0
过程:
1. 比较A[i]与B[j]的大小,如果A[i] < B[j],C[k++] = A[i++], 否则C[k++] = B[j++];
2. 循环直到A.B其中一个序列遍历完为止。
3. 循环跳出后另外一序列依然有剩余元素,依次将其赋值给C即可。
C++代码
void Merge(int* pData, int begin, int mid, int end){ if (NULL == pData) return; int* pDest = new int[end - begin + 1]; if (NULL == pDest) return; int i = begin; int j = mid + 1; int k = 0; while (i <= mid && j <= end) { if (pData[i] <= pData[j]) pDest[k++] = pData[i++]; else pDest[k++] = pData[j++]; } // 将未遍历到最后的序列剩余元素依次赋给临时空间 while (i <= mid) pDest[k++] = pData[i++]; while (j <= end) pDest[k++] = pData[j++]; // 将排序后的值复制回原区间 i = begin; k = 0; while (i <= end) pData[i++] = pDest[k++]; delete []pDest;}
如何对序列进行归并排序[MergeSort]
过程:
1. 将序列按中间位置进行划分。
2. 如果划分后的序列元素个数大于1,继续进行划分,直到序列元素个数为1。
3. 之后进行归并操作,最后整个序列全部有序。
C++代码
void MergeSort(int* pData, int begin, int end){ if (begin >= end) return; int mid = (begin + end) / 2; MergeSort(pData, begin, mid); MergeSort(pData, mid + 1, end); Merge(pData, begin, mid, end);}
0 0
- mergesort 归并排序
- mergesort归并排序
- MergeSort归并排序
- 归并排序--MergeSort
- MergeSort归并排序
- 归并排序(MergeSort)
- Mergesort-归并排序
- 归并排序算法 MergeSort
- 归并排序--MergeSort
- mergeSort - 归并排序
- 归并排序 MergeSort
- MergeSort归并排序
- 归并排序 MergeSort
- 归并排序(MergeSort)
- Mergesort-归并排序
- 【MergeSort】归并排序
- 归并排序(MergeSort)
- mergesort归并排序
- Database As a Fortress
- 你学会测试了吗(3):测试语法之断言介绍
- 你学会测试了吗(2):测试语法之属性介绍
- Use Uncertainty As a Driver
- 你学会测试了吗(1):推荐工具
- 归并排序MergeSort
- IE8下console undefined
- Linux的特殊文件权限
- NYOJ 36 最长公共子序列 (动态规划)
- 给定4个点判断是否能构成正方形
- 触发easyui combobox 中 onchange 事件
- Linux下 和 Windows 下 Oracle Instant Client 的安装.
- mybatis 学习笔记
- 硬件学习进程