数据结构基础7.4:归并排序
来源:互联网 发布:柜子设计软件 编辑:程序博客网 时间:2024/05/14 16:56
一.定义
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,
每个子序列是有序的,然后再把有序子序列合并为整体有序序列。
二.算法描述(递归实现):
递归过程是将待排序集合一分为二,直至排序集合就剩下一个元素为止,然后不断的合并两个排好序的数组。
三.代码实现(递归实现):
#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;/* 将两个有序数组归并到成一个有序数组 */void Merge(int a[], int tmp[], int start, int mid, int end){ int ptmp = start, pleft = start, pright = mid + 1; int num = end - start + 1; while(pleft <= mid && pright <= end) { if(a[pleft] > a[pright]) tmp[ptmp++] = a[pright++]; else tmp[ptmp++] = a[pleft++]; } while(pleft <= mid) tmp[ptmp++] = a[pleft++]; while(pright <= end) tmp[ptmp++] = a[pright++]; for(int i = start; i <= end; i++) a[i] = tmp[i];}/* 递归归并 */void MSort(int a[], int tmp[], int start, int end){ if(end > start) { int mid = start + (end - start) / 2; MSort(a, tmp, start, mid); MSort(a, tmp, mid + 1, end); Merge(a, tmp, start, mid, end); }}/* 归并排序接口 */void Merge_Sort(int a[], int n){ int tmp[n]; MSort(a, tmp, 0, n - 1);}int main(){ int i; int a[] = {1, 9, 2, 8, 3, 7, 4 ,6, 5, 0}; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d ", a[i]); printf("\n"); Merge_Sort(a, sizeof(a) / sizeof(a[0])); for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d ", a[i]); printf("\n"); system("pause"); return 0;}
0 0
- 数据结构基础7.4:归并排序
- 【数据结构基础】归并排序
- 数据结构基础(5) --归并排序
- 数据结构基础(5) --归并排序
- 数据结构基础(5) --归并排序
- 数据结构基础(5) --归并排序
- 数据结构基础(14)------------归并排序
- 数据结构基础 归并排序 java 实现
- 基础数据结构算法_快速排序,堆排序,归并排序
- 数据结构 排序 归并排序
- 【数据结构】:排序--归并排序
- 数据结构排序--归并排序
- 【基础排序】归并排序
- 基础排序:归并排序
- 数据结构之归并排序
- 数据结构--归并排序
- 【数据结构】归并排序
- 数据结构 - 归并排序
- 安全高效多渠道打包App
- 对于android WebView加载不出Html5网页的解决方法
- Android-Android API 版本判断
- Unity3d学习11
- Struts2:输入校验
- 数据结构基础7.4:归并排序
- background-size ,写在background里面,使用右划线
- “云计算最新技术进展与应用实践”技术分享圆满结束!
- EF框架学习手记
- 叶孤城大神之--视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- 推出一个透明的Viewcontroller控制器
- DynamoRIO 系列三:List of Samples -- 示例的功能
- 10001---Python环境搭建(Windows)
- android学习笔记:layer-list