归并之将两个有序数组合并(已測试)

#include<stdio.h>
#include<stdlib.h>

//归并作用是将两个序列合并 L = 左边起始位置,R = 右边起始位置 RightEnd = 右边终点位置
void Merge(int A[],int TmpA[],int L,int R,int RightEnd)
{
	int LeftEnd = R -1;         //左边终点位置 左右两列挨着
	int Tmp = L;                //存放结果初始位置
	int NumElements = RightEnd - L + 1;       //存放元素总个数
	while(L <= LeftEnd && R<= RightEnd)       //当左右两边都存在元素时比較大小将小的哪一个存入数组Tmp中
	{
		if(A[L] <A[R] )        //假设左边的值小则将左边的元素存入数组中
			TmpA[Tmp++] = A[L++];
		else                   //反之
			TmpA[Tmp++] = A[R++];
	}
	while(L <= LeftEnd)         //假设左边的数组长一点则将后面的直接存入数组
		TmpA[Tmp++] = A[L++];
	while(R <= RightEnd)
		TmpA[Tmp++] = A[R++];  //反之
	for(int i = 0; i < NumElements;i++,RightEnd --)  //用NumElem来控制赋值的次数
		A[RightEnd] = TmpA[RightEnd];
}

void main()
{
	int a[11] = {1,3,5,7,9,2,4,6,8,10,20};
	int b[11] = {0};
	Merge(a,b,0,5,9);
	for(int i=0;i<11;i++)
	{
		printf("%d\n",a[i]);
	}
	getchar();
}
时间: 2024-10-26 08:54:25

归并之将两个有序数组合并(已測试)的相关文章

算法--两个有序数组合并

两个有序数组合并 关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉 第15节 有序数组合并练习题 有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B.请编写一个方法,将B合并入A并排序. 给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组. Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Merge {

两个有序数组合并成一个有序数组

两个有序数组合并成一个有序数组 1. 题目描述 数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的? 2. 从后往前合并 这道题目是师兄电面阿里的时候,问到的一道题目.现在我们来说一下解法~ 假设数组a足够长,可以在数组a上合并二者.我们的解法基本思想就是从后往前合并数组. 每次合并的时候,都要比较a和b当前数组的大小,取较大的值后移,注意一定要是后移! 为什么从后往前呢?其实就是为了方便后移,因为较大的一定是在后面的. 程序如下: #include<iostr

两个有序数组合并算法

有两个有序数组A和B,如果把A和B合并起来到C中,具体算法如下: public static int [] MergeArray(int[] ArrayLeft, int[] ArrayRight)// { int length = ArrayLeft.Length + ArrayRight.Length; int[] ArrayMerge = new int[length]; int i = 0; int j = 0; while (i < ArrayLeft.Length &&

算法 - 两个有序数组合并成一个有序数组

//两个有序数组的合并函数 public static int[] MergeList(int a[],int b[]) { int result[]; if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的 { result = new int[a.length+b.length]; int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组 while(i<a.length &&

两个有序数组合并为一个有序数组

突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵. 思想:先依次比较两个数组,按照小的就传入新的数组.当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可. 代码: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class ArraySort{ //两个有序数组

Python版将两个有序数组合并为一个有序数组

第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0.然后再把不为空的老数组中剩下的部分加到新数组的结尾.(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.appen

88. Merge Sorted Array【leetcode】算法,java将两个有序数组合并到一个数组中

88. Merge Sorted Array Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The n

将两个有序数组合并为一个有序数组

原文地址:https://www.cnblogs.com/cjsblog/p/10015422.html

合并两个有序数组

思路: 跟替换字符串中的空格一样,都是从后往前遍历.因为从前往后遍历的话,元素需要移动的次数较多. 示意图: 代码: /****************************************** 两个有序数组的合并 by Rowandjj 2014/7/16 ******************************************/ #include<iostream> using namespace std; #define MAX 1024 //合并有序数组a与有序数