1035 插入与归并 测试点2、5、6
作者:互联网
易错点
-
测试点2:插入排序的判断,思路是否正确,可检验测试点:3 1 3 2 1 3 2,如果输出:插入排序,1 2 3,即正确
-
测试点5、6:归并排序中,若归并的每组数的数量为n,若最后一组数的数量不足n,此时最后一组数也要记得进行排序。如:
7 3 1 2 8 7 5 9 1 3 2 8 5 7 4
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[101];
int b[101];
int main()
{
int n;
int f;
int max=-9999999;
int maxj;
int tmp;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
for(int i=0;i<n;i++){
if(b[i]>b[i+1]&&i+1<n){
for(int j=i+1;j<n;j++){
if(a[j]!=b[j]){
cout<<"Merge Sort"<<endl;
f=2;
goto here;
}
}
cout<<"Insertion Sort"<<endl;
f=1;
break;
}
}
// for(int i=n-1;i>=0;i--){
// if(a[i]==b[i]){
//
// }
// else{
// for(int j=i;j>=0;j--){
// if(j>=1&&b[j]<b[j-1]){
// cout<<"Merge Sort"<<endl;
// f=2;
// goto here;
// }
// }
// cout<<"Insertion Sort"<<endl;
// f=1;
// break;
// }
// }
here:
if(f==1){
for(int i=0;i<n;i++){
if(i+1<n&&b[i]>b[i+1]){
for(int j=i+1;j>=0;j--){
if(b[j]<b[j-1]&&j-1>=0){
tmp=b[j];
b[j]=b[j-1];
b[j-1]=tmp;
}
}
break;
}
}
for(int i=0;i<n;i++){
if(i==0){
cout<<b[i];
}
else{
cout<<" "<<b[i];
}
}
}
if(f==2){
for(int i=0;i<n;i++){
if(b[i]>b[i+1]&&i+1<n){
tmp=i+1;
here2:
for(int j=0;j*tmp<n;j++){
if((j+1)*tmp-1<n){
for(int k=j*tmp;k<(j+1)*tmp-1;k++){
if(b[k]>b[k+1]&&k+1<(j+1)*tmp-1){
tmp--;
goto here2;
}
}
}
else{
for(int k=j*tmp;k<n;k++){
if(b[k]>b[k+1]&&k+1<n){
tmp--;
goto here2;
}
}
}
}
break;
}
}
tmp*=2;
for(int i=0;(i+1)*tmp-1<n;i++){
sort(b+tmp*i,b+tmp*(i+1));
if((i+2)*tmp-1>=n){
sort(b+(i+1)*tmp,b+n);
}
}
for(int i=0;i<n;i++){
if(i==0){
cout<<b[i];
}
else{
cout<<" "<<b[i];
}
}
}
return 0;
}
参考
(27条消息) A1089/B1035——Insert Merge插入与归并(测试点5、6)_Yoosii的博客-CSDN博客
标签:tmp,归并,测试点,int,&&,include,1035 来源: https://www.cnblogs.com/wodeblog1982/p/16485934.html