• PAT排序题---1035 插入与归并 (25分)


    1035 插入与归并 (25分)

    • 数据比较小,归并不用写合并函数,直接sort
    • 中间序列不包括初始序列
    #include<iostream>
    #include<vector>
    #include<cctype>
    #include<map>
    #include<set>
    #include<sstream>
    #include<string>
    #include<cstdio>
    #include<algorithm>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=111;
    typedef long long ll;
    
    using namespace std;
    
    int origin[maxn],tempOri[maxn],changed[maxn];//原始数组,原始数组备份,目标数组
    int n;
    bool isSame(int A[],int B[]){
    	for(int i=0;i<n;i++){
    		if(A[i]!=B[i]) return false;
    	}
    	return true;
    } 
    
    bool showArray(int A[]){
    	for(int i=0;i<n;i++){
    		printf("%d",A[i]);
    		if(i<n-1) cout<<" ";
    	}
    	cout<<"
    ";
    }
    
    bool insertSort(){
    	bool flag=false;
    	for(int i=1;i<n;i++){
    		if(i!=1&&isSame(tempOri,changed)){
    			flag=true;
    		}
    		int temp=tempOri[i],j=i;
    		while(j>0&&tempOri[j-1]>temp){
    			tempOri[j]=tempOri[j-1];
    			j--;
    		}
    		tempOri[j]=temp;
    		if(flag==true){
    			return true;
    		}
    	}
    	return false;
    }
    
    void mergeSort(){
    	bool flag=false;
    	for(int step=2;step/2<=n;step*=2){
    		if(step!=2&&isSame(tempOri,changed)){
    			flag=true;
    		}
    		for(int i=0;i<n;i+=step)
    		sort(tempOri+i,tempOri+min(i+step,n));
    		if(flag){
    			showArray(tempOri);
    			return ;
    		}
    	}
    }
    int main() {
    	cin>>n;
    	for(int i=0;i<n;i++){
    		cin>>origin[i];
    		tempOri[i]=origin[i];
    	}
    	for(int i=0;i<n;i++){
    		cin>>changed[i];
    	}
    	if(insertSort()){
    		cout<<"Insertion Sort
    ";
    		showArray(tempOri);
    	}else{
    		cout<<"Merge Sort
    ";
    		for(int i=0;i<n;i++){
    			tempOri[i]=origin[i];
    		}
    		mergeSort();
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    qemu-kvm虚拟化——内存
    Virtualization and Performance: Understanding VM Exits
    Linux日志文件
    Linux那些让你虎躯一震的命令
    Linux命令——watch
    Linux kernel buffer ring
    Linux命令——dmesg
    Linux命令——systemctl
    Linux命令——taskset
    /sys 和 /dev 区别
  • 原文地址:https://www.cnblogs.com/bingers/p/13128923.html
Copyright © 2020-2023  润新知