数据结构 Merge合并排序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            int[] a = { 1, 5, 7, 12 };
            int[] b = { 2, 6, 8, 9 };
            int len = a.Length + b.Length;
            int[] c = new int[len];
            int v1_index = 0;
            int v2_index = 0;
            int index = 0;

            while (index <= len)
            {
                if (a[v1_index] < b[v2_index])
                {
                    c[index++] = a[v1_index];
                    v1_index++;
                }
                else if (a[v1_index] == b[v2_index])
                {
                    c[index++] = a[v1_index];
                    c[index++] = b[v2_index];
                    v1_index++;
                    v2_index++;
                }
                else
                {
                    c[index++] = b[v2_index];
                    v2_index++;
                }

                if (v1_index == a.Length || v2_index == b.Length)
                {
                    break;
                }

            }
            if (v1_index == a.Length)
            {
                for (int i =v2_index; i < b.Length; i++)
                {
                    c[index++] = b[i];

                }
            }
            else
            {
                for (int i = v1_index; i < a.Length; i++)
                {
                    c[index++] = a[i];

                }

            }

        }
    }
}
时间: 2024-10-07 05:29:53

数据结构 Merge合并排序的相关文章

lintcode 容易题:Merge Sorted Array II 合并排序数组 II

题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] 注意 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素. 解题: 这里给的是两个数组,上题给的是ArrayList格式,比较好处理,重新定义一个长度m+n的数组,太无节操,其他方法一时想不起来 官方解题,方法很技巧,可以倒着排序,这样就很简单了 Java程序: class

深入浅出数据结构C语言版(21)——合并排序

在讲解合并排序之前,我们先来想一想这样一个问题如何解决: 有两个数组A和B,它们都已各自按照从小到大的顺序排好了数据,现在我们要把它们合并为一个数组C,且要求C也是按从小到大的顺序排好,请问该怎么做? 这个问题非常容易解决,我们将A.B和C都视为队列,然后不断比较A和B的首部,取出其中更小的数据出队 http://pic.cnhubei.com/space.php?uid=4593&do=album&id=1092952http://pic.cnhubei.com/space.php?ui

算法导论学习之插入排序+合并排序

最近准备花时间把算法导论详细的看一遍,强化一下算法和数据结构的基础,将一些总结性的东西写到博客上去. 一.插入排序 算法思想:如果一个数组A,从A[1–n-1]都是有序的,然后我们将A[n]插入到A[1–n-1]的某个合适的位置上去那么就可以保证A[1–n]都是有序的.这就是插入排序的思想:具体实现的时候我们将数组的第一个元素看出有序,然后从第二个元素开始按照上面的步骤进行插入操作,直到插入最后一个元素,然后整个数组都是有序的了. 时间复杂度分析:代码中有两重for循环,很容易看出时间复杂度是n

17. 蛤蟆的数据结构进阶十七排序实现之归并排序

17. 蛤蟆的数据结构进阶十七排序实现之归并排序 本篇名言:"人生不是一种享乐 ,而是一桩十分沉重的工作.-- 列夫 . 托尔斯泰" 我们来看下归并排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47790163 1.  归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个

数据结构-实验六 排序

实验六   排序   l  实验目的 1.排序的基本概念 1.掌握在数组上进行各种排序的方法和算法. 2.深刻理解各种方法的特点,并能灵活应用. 3.加深对排序的理解,逐步培养解决实际问题的编程能力. l  实验内容 1.排序的基本概念 (一)基础题 1.编写各种排序方法的基本操作函数: (1)s_sort(int e[],int n)选择排序: (2)si_sort(int e[],int n)直接插入排序: (3)sb_sort(int e[],int n)冒泡排序: (4)merge(in

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

数据结构实验4(排序算法的实现及性能分析)

实现了选择排序, 插入排序, 冒泡排序, 快速排序, 改进后的快速排序, 以及两路合并排序. 通过随机函数随机生成100个数, 进行各种排序, 记录排序开始时间以及结束时间, 计算消耗的时间来比较算法的优略. 实现代码: #include "iostream" #include "cstdio" #include "cstring" #include "algorithm" #include "queue"

ACM ICPC 2011–2012, NEERC, Northern Subregional Contest J. John’s Inversions(合并排序求逆序数对数)

题目链接:http://codeforces.com/gym/100609/attachments 题目大意:有n张牌,每张牌有红色和蓝色两面,两面分别写了一些数字,同种颜色的任意两个数字若排在前面的数字比排在后面的数字大就叫做一对逆序数.求怎样排序得到的逆序数对最少. 解题思路:其中一种颜色的数字是顺序且这种颜色数字相同时对应的另一种颜色的数字是顺序时得到的逆序数对数最少.难点在于求逆序数对数.因为数量很大O(n^2)复杂度不能满足,这里根据合并排序的原理求解每个数字前面有多少个比它大的数字,

C言语合并排序(兼并排序)算法及代码

合并排序也称兼并排序,其算法思惟是将待排序序列分为两局部,顺次对分得的两个局部再次运用合并排序,之后再对其停止兼并.仅从算法思惟上理解合并排序会认为很笼统,接下来就以对序列A[0], A[l]-, A[n-1]停止升序陈列来停止解说,在此采取自顶向下的完成办法,操作步调如下.(1)将所要停止的排序序列分为阁下两个局部,假如要停止排序的序列的肇端元素下标为first,最初一个元素的下标为last,那么阁下两局部之间的临界点下标mid=(first+last)/2,这两局部辨别是A[first -