其他分享
首页 > 其他分享> > 1035 插入与归并 测试点2、5、6

1035 插入与归并 测试点2、5、6

作者:互联网

易错点

  1. 测试点2:插入排序的判断,思路是否正确,可检验测试点:3 1 3 2 1 3 2,如果输出:插入排序,1 2 3,即正确

  2. 测试点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