⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 两个数组合并排序.cpp

📁 Visual C++实现的一个数组排序程序的源码
💻 CPP
字号:
#include<iostream.h>
#include<time.h>
#include<stdlib.h>

int validateInt();
int * createOneArray(int);
int * createNewArray(int*,int,int*,int);
void displayArray(int*,int);
void InsertSort(int*,int);

void main()
{
	int size1=validateInt();
	while(size1==0)
	{
		cout<<"请输入正整数:";
		size1=validateInt();
	}
	int * p1=createOneArray(size1);
	InsertSort(p1,size1);
	cout<<"产生第二个数组:"<<endl;
	displayArray(p1,size1);


	int size2=validateInt();
	while(size2==0)
	{
		cout<<"请输入正整数:";
		size2=validateInt();
	}
	int * p2=createOneArray(size2);
	InsertSort(p2,size2);
	cout<<"产生第二个数组:"<<endl;
	displayArray(p2,size2);



	cout<<"两个数组合并排序之后:\n";
	int *pInt=createNewArray(p1,size1,p2,size2);
	displayArray(pInt,(size1+size2));

}
int validateInt()
{
	cout<<"请输入数组大小:"<<endl;
	int size=0;
	int byte;
	int len;
	int b=1;
	streambuf * sbuf=cin.rdbuf();
	byte=sbuf->sbumpc();
	sbuf->pbackfail(byte);//清空缓冲区的byte,后面重新读取。方便后面从第一位数开始读取。
	len=sbuf->in_avail();
	
	for(int n=0;n<len-2;n++)//len-2是因为减去回车键(10)占用的两个字节的长度。
	{
		b=b*10;
	}
	while((byte=sbuf->sbumpc())!=10)
	{
		if(byte<48 || byte>57)
		{
			return 0;
		}
		size=size+(byte-48)*b;
		b=b/10;
	}
	return size;
}
int * createOneArray(int size)
{
	srand((unsigned)time(0));
	int * p=new int[size];
	for(int i=0;i<size;i++)
	{
		p[i]=rand() % 900 + 100;
	}
	return p;
}

void displayArray(int * pInt,int size)
{
	for(int i=0;i<size;i++)
	{
		cout<<pInt[i];
		if((i+1)%10==0)
			cout<<endl;
		else
			cout<<"  ";
	}
	cout<<endl;
}
void InsertSort(int* pInt,int size)
{
	int j;
	int insert;
	for(int i=1;i<size;i++)
	{
		j=i-1;
		insert=pInt[i];
		while(j<i && insert<pInt[j])
		{
			pInt[j+1]=pInt[j];
			j--;
		}
		pInt[j+1]=insert;
	}
}
int * createNewArray(int* p1,int size1,int* p2,int size2)
{
	int size=size1+size2;
	int *p=new int[size];
	
		int index=0;
		int index1=0;
		int index2=0;
	while(index1<size1 && index2<size2)
	{
		if(p1[index1]<p2[index2])
		{
			p[index]=p1[index1];
			index1++;
		}
		else if(p1[index1]>p2[index2])
		{
			p[index]=p2[index2];
			index2++;
		}
		index++;
	}
	return p;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -