6. 合并排序数组

 合并两个排序的整数数组A和B变成一个新的数组。

 先确定两个数组的大小,即确定数组中元素的个数,可以使用sizeof()函数。

 起初的想法是再新建一个更大的数组,即空间大小为a和b的和。直接把所有的元素放到其中,然后再进行排序。最后输出的就是组合后的数组。

int size1,size2;
	size1=sizeof(a)/4;
	size2=sizeof(b)/4;
	int s[size1+size2];
	for(int i=0;i<size1+size2;i++){
		if(i<size1){
			s[i]=a[i];
		}
		if(i>=size2-1){
			s[i]=b[i-size1];
		}
	}
	for(int i=0;i<size1+size2-1;i++){  //冒泡排序
		int temp;
		for(int j=0;j<size1+size2-i-1;j++){
			if(s[j]>s[j+1]){
				temp=s[j];
				s[j]=s[j+1];
				s[j+1]=temp;
			}
		}
	}
	for(int i=0;i<sizeof(a)/4+sizeof(b)/4-2;i++){
		cout<<s[i]<<endl;
	}
 但是当数据量大是时候,这种方法耗时太大,并且因为两个分开的数组都是有序的,应该充分利用这一条件,虽然可以通过改变排序方式来改变时间复杂度,但又会消耗多余的空间,顾此失彼。

 后来改用不先放到数组中,在放入的时候就进行判断,依次放入。这样充分利用了数组的有序性。

int sum,i,j;
	i=sizeof(a)/4-1;
	j=sizeof(b)/4-1;
	sum=i+j;
	int s[i+j];
	while(sum>=0){
		if(i>=0 && j>=0){
			if(a[i]>b[j]){
				s[sum]=a[i];
				i--;sum--;
			}else if(a[i]<b[j]){
				s[sum]=b[j];
				j--;sum--;
			}else{
				s[sum]=a[i];
				s[sum-1]=b[j];
				sum-=2;
				a--;b--;
			}
		}else if(i>=0 && j<0){
			s[sum--]=a[i--];
		}else if(i<0 && j>=0){
			s[sum--]=b[j--];
		}
	} 
	for(int i=0;i<sizeof(a)/4+sizeof(b)/4-2;i++){
		cout<<s[i]<<endl;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值