C++模板数组实现有序数组的排列合并算法

#ifndef ARRAYCLASS_H
#define ARRAYCLASS_H

#include<iostream>
using namespace std;
template <typename T>class ordarray{
	const static int maxsize=50;
	int last;
	T slist[50];
public:
	ordarray();
	void setobject(const T[],const int length);
	void Insertsort();
	void merge(const ordarray arr2);
};
template <typename T>ordarray<T>::ordarray()
{
	last=-1;
}
template <typename T> void ordarray<T>::setobject(const T temp[],const int length)
{
	for (last=0;last<length&&last<maxsize;last++)
	{
		slist[last]=temp[last];
	}			
}
template <typename T> void ordarray<T>::Insertsort()
{
	int i,j;
	T temp;
	for (i=1;i<last;i++)
	{
		temp=slist[i];
		j=i;
		while(j>0&&temp<slist[j-1])
		{
			slist[j]=slist[j-1];
			j--;
		}
		slist[j]=temp;
	}
}
template<typename T>void ordarray<T>::merge(const ordarray arr2)
{
	int i=0,j=0,asize=0;
	ordarray<T> temp;
	
	while((i<last)&&(j<arr2.last))
	{
		if(slist[i]<=arr2.slist[j]) {temp.slist[asize]=slist[i];i++;}

		else {temp.slist[asize]=arr2.slist[j];j++;}
		asize++;
	}
	if(i==last){	for(;j<arr2.last;j++){	temp.slist[asize]=arr2.slist[j];  asize++; }}

	else{	for(;i<last;i++){temp.slist[asize]=slist[i];	asize++; }}
	
	cout<<"打印:"<<endl;
	cout<<"array1=";
	for(i=0;i<last;i++)cout<<slist[i]<<'\t';
	cout<<endl;
	cout<<"array2=";
	for(i=0;i<arr2.last;i++)cout<<arr2.slist[i]<<'\t';
	cout<<endl;
	cout<<"array1+array2=";
	for(i=0;i<asize;i++)cout<<temp.slist[i]<<'\t';
	cout<<endl;	
}

#endif




#include"arrayclass.h"
#include<iostream>
using namespace std;
#include<string>

int main(){
	int i=0;
	ordarray<string> sarr1;
	ordarray<string> sarr2;
	string str1[3]={"啊啊","拜拜","此处"};//******ASCII码从大到小排序
	string str2[5]={"到底","恩恩","方法","刚刚","哈哈"};
	sarr1.setobject(str1,3);
	sarr2.setobject(str2,5);
	sarr1.merge(sarr2);

	string str3[3]={"a","c","e"};
	string str4[5]={"b","d","f","g","h"};
	sarr1.setobject(str3,3);
	sarr2.setobject(str4,5);
	sarr1.merge(sarr2);

	ordarray<char> carr1;
	ordarray<char>carr2;
	char cstr1[3]={'a','b','c'};
	char cstr2[5]={'d','e','f','g','h'};
	carr1.setobject(cstr1,3);
	carr2.setobject(cstr2,5);
	carr1.merge(carr2);

	char cstr3[3]={'a','c','f'};
	char cstr4[5]={'b','d','e','g','h'};
	carr1.setobject(cstr3,3);
	carr2.setobject(cstr4,5);
	sarr1.merge(sarr2);

	ordarray<int> iarr1;
	ordarray<int> iarr2;
	int score1[5]={96,97,98,99,100};
	int score2[10]={86,87,88,89,90,91,92,93,94};
	iarr1.setobject(score1,5);
	iarr2.setobject(score2,10);
	iarr1.merge(iarr2);

	int score3[3]={96,98,100};
	int score4[5]={91,92,96,97,100};
	iarr1.setobject(score3,3);
	iarr2.setobject(score4,5);
	iarr1.merge(iarr2);

	int score5[8]={96,98,100,1,10,20,15,11};
	int score6[10]={91,92,96,97,100,22,11,33,44,55};
	iarr1.setobject(score5,8);
	iarr2.setobject(score6,10);
	iarr1.Insertsort();//调用排序功能
	iarr2.Insertsort();
	iarr1.merge(iarr2);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值