zoukankan      html  css  js  c++  java
  • 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;
    }
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    我的知识库(4) java获取页面编码(Z)
    知识库(3)JAVA 正则表达式 (超详细)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts
    某人总结的《英语听力的技巧 》,挺搞的
    我的知识库(5)java单例模式详解
    构建可扩展程序
    SerialPort (RS232 Serial COM Port) in C# .NET
    Python学习笔记——String、Sequences
    UI题目我的答案
    jQuery学习系列学会操纵Form表单元素(1)
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11882338.html
Copyright © 2011-2022 走看看