Insert or Merge(25分)
7-13 Insert or Merge(25 点)
According to Wikipedia:
Insertion sort iterates、consuming one input element each repetition、and growing a sorted output list.Each iteration、insertion sort removes one element the input data、finds the location it belongs within the sortlist、andreement init
Merge sort works as follows:Divide the unsorted list into N sublists,each containing 1 element(a list of 1 element is consident sorted)The n repeatdy merge two adjacent sublists to produce newsorted sublists.ints.ints.ints.inite 1.init.init.init.indent.indent.indent.indent.indent.indent.inde
Now given the initial sequence of integers、together with a sequence which is a several iteration s of some sorting method、can you tell which sorting method we are using?
Input Specification:
Each input file contains one test case.For each case,the first line gives a positive integer N (≦100).The n in the nextライン、 N integers are given as the initial sequence.The last line contains the partially sorted sequence of the N numbers.It is asumbers-that the target sequence is always ascending.All the numbers in a line e e separated bya space.
Output Specification:
For each test case,print in the first line either“Insertion Sort”or“Merge Sort”ストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストスト...
Sample Input 1:
According to Wikipedia:
Insertion sort iterates、consuming one input element each repetition、and growing a sorted output list.Each iteration、insertion sort removes one element the input data、finds the location it belongs within the sortlist、andreement init
Merge sort works as follows:Divide the unsorted list into N sublists,each containing 1 element(a list of 1 element is consident sorted)The n repeatdy merge two adjacent sublists to produce newsorted sublists.ints.ints.ints.inite 1.init.init.init.indent.indent.indent.indent.indent.indent.inde
Now given the initial sequence of integers、together with a sequence which is a several iteration s of some sorting method、can you tell which sorting method we are using?
Input Specification:
Each input file contains one test case.For each case,the first line gives a positive integer N (≦100).The n in the nextライン、 N integers are given as the initial sequence.The last line contains the partially sorted sequence of the N numbers.It is asumbers-that the target sequence is always ascending.All the numbers in a line e e separated bya space.
Output Specification:
For each test case,print in the first line either“Insertion Sort”or“Merge Sort”ストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイアイストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストストスト...
Sample Input 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
Sample Output 1:Insertion Sort
1 2 3 5 7 8 9 4 6 0
Sample Input 2:10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6
Sample Output 2:Merge Sort
1 2 3 8 4 5 7 9 0 6
#include
using namespace std;
void Merge(int sequence1[],int l,int r,int rend,int temp[]){
int lend=r-1;
int s=l;
while(l<=lend&&r<=rend){
if(sequence1[l] else temp[s++]=sequence1[r++];
}
while(l<=lend) temp[s++]=sequence1[l++];
while(r<=rend) temp[s++]=sequence1[r++];
}
int main(){
int N;
int flag=1;//Insertion_sort
cin>>N;
int sequence[N];
int sequence1[N];
for(int i=0;i cin>>sequence[i];
for(int i=0;i cin>>sequence1[i];
int i,j;
for(j=0;j if(sequence1[j]>sequence1[j+1]) break;
int sign=j;
for(j=j+1;j if(sequence[j]!=sequence1[j]) flag=0;//Merge_sort
if(flag==1){
cout< int temp=sequence1[sign+1];
for(i=sign+1;i>=0;i--)
if(temp sequence1[i]=sequence1[i-1];
else break;
sequence1[i]=temp;
int tag=0;
for( i=0;i if(tag++==0) cout< else cout< }
}
else{
int tag=1;
cout< int length;
for(length=2;length<=N;length*=2){
for(i=length-1;i if(sequence1[i]>sequence1[i+1])
{tag=0; break;}
if(tag==0) break;
}
int temp[N];
for(i=0;i Merge(sequence1,i,i+length,i+2*length-1,temp);
if(i+length Merge(sequence1,i,i+length,N-1,temp);
else
for(;i int tick=0;
for(int k=0;k if(tick++==0) cout< else cout< cout< }
return 0;
}