二路归并排序
来源:互联网 发布:网络电影《罪》在哪看 编辑:程序博客网 时间:2024/05/22 08:10
二路归并排序是归并排序的一种基本方式。归并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
以序列11,24,17,7,22,36,27,10,19,18 为例
初始时为:11 24 17 7 22 36 27 10
第一次归并(两两合并):{11,24}、 {7,17}、 {22,36}、{10,27}
第二次归并:{7,11,17,24}、{10,22,27,36}
第三次归并:{7,10,17,22,24,27,36}
下面代码是用C++写的例子:
#include<iostream>using namespace std;#define MaxSize 100void Merge(int source[],int target[],int start,int mid,int end){ int j,k,n; for(j=mid+1,k=start;start<=mid && j<=end;k++) { if (source[start]<source[j]) target[k]=source[start++]; else target[k]=source[j++]; } if(start<=mid) { for(n=0;n<=mid-start;n++) target[k+n]=source[start+n]; } if(j<=end) { for(n=0;n<=end-j;n++) target[k+n]=source[j+n]; }}void MergeSort(int source[],int target[],int start, int end){ int mid; int tmp[MaxSize]; if(start==end) target[start]=source[start]; else { mid=(start+end)/2; MergeSort(source,tmp,start,mid); MergeSort(source,tmp,mid+1,end); Merge(tmp,target,start,mid,end); }}void main(){int a[10]={11,24,17,7,22,36,27,10,19,18};int b[10]={0};MergeSort(a,b,0,9);for(int i=0;i<10;i++){cout<<b[i]<<endl;}}
0 0
- 归并排序:二路归并
- 归并排序--二路归并
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 美俄外长举行4小时会谈 未就乌克兰问题达成任何协
- MySQL执行外部sql脚本文件的命令
- android TabHost选项卡示例
- Ruby设置HTTP响应头
- oracle数据文件(表空间文件)被rm掉了,表空间如何删除 。
- 二路归并排序
- comboBox动态加载数据并支持多选(checkbox)
- gcc的_attribute_编译属性
- Fusioncharts free X轴 文字重叠 的解决办法
- ios学习笔记----数据持久化
- cocos2d-x CCEditBox使用
- API Levels与Android os_version的对比
- 操作系统中的互斥,同步与死锁
- sql-b表数据插入或更新到a表