栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

合并排序模板C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

合并排序模板C++

#include 
using namespace std;
#include
void Copy(int a[],int b[],int left,int right)
{
    //将b[0]至b[right-left+1]拷贝到a[left]至a[right]
	int size=right-left+1;
	for(int i = 0;i
		a[left++]=b[i];	// a[1] = b[0],a[2] = b[1]......
	}
}

void Merge(int a[],int b[],int left,int i,int right){
  //合并有序数组a[left:i],a[i+1:right]到b,得到新的有序数组b
	int a1Begin=left, //指向第一个数组开头
	    a1End=i, //指向第一个数组结尾
	    a2Begin=i+1, //指向第二个数组开头
	    a2End=right, //指向第二个数组结尾
	    bcout=0; //指向b中的元素
	for(int j=0; j
        //执行right-left+1次循环,数组
		if(a1Begin>a1End) {
			b[bcout++]=a[a2Begin++];
			continue;
		}  //如果第一个数组结束,拷贝第二个数组的元素到b
		if(a2Begin>a2End) {
			b[bcout++]=a[a1Begin++];
			continue;
		}  //如果第二个数组结束,拷贝第一个数组的元素到b
		if(a[a1Begin]
			b[bcout++]=a[a1Begin++];
			continue;
		}  //如果两个数组都没结束,比较元素大小,把较小的放入b
		else {
			b[bcout++]=a[a2Begin++];
			continue;
		}
	}
}

void MergeSort(int a[],int left,int right){
  int *b = new int[right-left+1];
  if(left
    int mid = (right+left)/2;
    MergeSort(a,left,mid);
    MergeSort(a,mid+1,right);
    Merge(a,b,left,mid,right);
    Copy(a,b,left,right);
  }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号