• A1089 Insert or Merge (25 分)


    一、技术总结

    1. 看到是一个two pointers问题,核心是要理解插入排序和归并排序的实现原理,然后判断最后实现
    2. 可以知道a数组和b数组怎么样判断是插入排序还是归并排序,因为插入排序是来一个排一个,所以知道当发现有位置当前数比后面大时,进而再判断后面的每一位是否啊a、b数组都相等,如果是那么就是插入排序,再在后面进行一轮排序即可。如果不是就是归并排序。最主要的问题是判断归并排序到哪一轮了,使用while循环模拟归并排序,对数组a进行归并排序,直到与数组b相等,再进行一轮排序就是输出结果了。

    二、参考代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main(){
    	int a[100], b[100], i, j, n;
    	cin >> n;
    	for(int i = 0; i < n; i++){
    		cin >> a[i];
    	}
    	for(int i = 0; i < n; i++){
    		cin >> b[i];
    	}
    	for(i = 0; i < n-1 && b[i] <= b[i+1]; i++);
    	for(j = i+1; j < n && a[j] == b[j]; j++);
    	if(j == n){
    		printf("Insertion Sort
    ");
    		sort(a, a+i+2);
    	}else{
    		printf("Merge Sort
    ");
    		int flag = 1, k = 1;
    		while(flag){
    			flag = 0;
    			for(i = 0; i < n; i++){
    				if(a[i] != b[i]){
    					flag = 1;
    				}
    			}
    			k = k*2;
    			for(i = 0; i < n/k; i++){
    				sort(a+i*k, a+(i+1)*k);
    			}
    			sort(a+n/k*k, a+n);
    		}
    	}
    	for(j = 0; j < n; j++){
    		if(j != 0){
    			printf(" ");
    		}
    		cout << a[j];
    	}
    	return 0;
    }
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    TControl的主要功能研究(属性,函数,事件)
    写一个控件,如何实现设计期的可视化
    Delphi 通过脚本 在 设计期 改 控件name 属性
    Delphi TreeView – 自动展开树形结构
    Delphi之创建组件模板(Component Template)
    delphi Controls Components 属性
    Delphi 2009 之 TCategoryPanelGroup[1]: ChevronAlignment 等
    delphi xe 10分组按钮CategoryButtons 折叠按钮
    Delphi ControlCount和ComponentCount的区别
    ComponentCount和ControlCount区别
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11882338.html
Copyright © 2020-2023  润新知