📄 两个数组合并排序.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 + -