用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

merge_sort

2017-03-26 作者: 云代码会员举报

[c++]代码库

#include<iostream>
using namespace std;
#define size 6

//合并函数 
void merge(int array[],int first,int mid,int last){
	
	int temp[size]; //声明一个临时数组temp
	int i; //控制变量i
	int j = first; //控制变量j,初始值为最小数组下标first,first-mid为左半数组 
	int n = mid+1; //控制变量n,初始值为数组中间下标mid,+1,mid+1到last为右半数组
	int k = first; //控制变量k,初始值为最小数组下标0,控制临时数组temp的下标 
	
	//将临时数组temp的每一个值初始化为 0 
	for(i=0;i<size;i++){
		
		temp[i]=0;
	}
	//将控制变量 i 置零,以便后面继续使用 
	i = 0;
	
	
	// 当左半数组和右半数组都不为空时... 
	while(j<=mid&&n<=last){
		
		if(array[j]<array[n]){
			
			temp[k] = array[j];
			k++;j++;
		
		}
		else{
			temp[k] = array[n];
			k++;n++;
		}
	}
	
	//当右数组为空时,输出另一数组的剩余元素 
	while(j<=mid&&n>last){
		temp[k] = array[j];
		k++;j++;
	}
	
	//当左数组为空时,输出另一数组的剩余元素 
	while(n<=last&&j>mid){
		temp[k] = array[n];
		k++;n++;
	}

	//将temp数组赋值给原数组
	for(i=first;i<=last;i++){
		array[i] = temp[i];
	}
} 



//排序函数 
void sort(int array[], int first, int last){
	
	
	if(first<last){
		
		int mid = (first+last)/2;
		sort(array,first,mid);//递归排序左数组 
		sort(array,mid+1,last);//递归排序右数组 
		merge(array,first,mid,last);//调用merge函数,合并 
	}
}



int main(){
	
	int array[size] = {3,342,112,43,446,318};
	sort(array,0,size-1);
	for(int i=0;i<size;i++){
		cout<<array[i]<<" ";
	}
	return 0; 
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...