首页 > 其他分享 >合并有序数组

合并有序数组

时间:2023-07-19 21:14:09浏览次数:27  
标签:数组 int 合并 a1 a2 有序 iEnd jEnd

合并有序数组

方法1-递归

//运用的思想就是比较谁大,谁就先被排进数组   
public  static void merge(int []a1,int i,int iEnd,int j,int jEnd,
                              int []a2,int k){
    //定义了一个a1数组,分了i,iEnd边界和j.jEnd边界,实际上是分成两个数组进行判断,比较判断哪个先进a2数组
        if(i>iEnd){//如果超出进行数组迁移
           System.arraycopy(a1,j,a2,k,jEnd-j+1);
            //原数组,开始迁移的位置,新数组,迁移到的位置,迁移的长度
           return;
        }
        if(j>jEnd){
            System.arraycopy(a1,i,a2,k,iEnd-i+1);
            return;
        }
//优先写这一步
    //如果a1[i]小,就放a[i]
        if(a1[i]<a1[j]){
             a2[k]=a1[i];
            //开始递归
             merge(a1,i+1,iEnd,j,jEnd,a2,k+1);
         }
         if(a1[i]>a1[j]){
             a2[k]=a1[j];
             merge(a1,i,iEnd,j+1,jEnd,a2,k+1);
         }
    }

非递归方法

   public static void merge1(int []a1,int i,int iEnd,int j,int jEnd,int []a2){
        int k=0;//内置k
        while (i<=iEnd&&j<=jEnd){//都没到边界
            if(a1[i]<a1[j]){
                a2[k]=a1[i];
                i++;//递增
            }else {
                a2[k]=a1[j];
                j++;
            }
            k++;
        }
        if(i>iEnd){//一旦i结束,复制数组j
            System.arraycopy(a1,j,a2,k,jEnd-j+1);
        }
        if(j>jEnd){
            System.arraycopy(a1,i,a2,k,iEnd-i+1);
        }
    }

标签:数组,int,合并,a1,a2,有序,iEnd,jEnd
From: https://www.cnblogs.com/cgy-chen/p/17566735.html

相关文章

  • 暑假集训随笔2 主席树/二维树状数组
    P4514上帝造题的七分钟题意维护对二维平面上的矩形区域各元素进行加法以及对矩形区域求和链接:https://www.luogu.com.cn/problem/P4514思路通过二维树状数组维护的二维前缀和利用差分实现矩形区域的区间加法与区间求和。具体而言,二维的前缀和可以仿照一维的前缀和进行定义......
  • shell脚本中对数组的操作汇总
    方法用例备注创建数组arr=(val_1val_2val_3)数组间的元素以空格分割。创建空数组arr_new=()访问数组arr=(val_1val_2val_3)echo"${arr[0]}"数组的索引从“0”开始,在这个例子中,脚本会输出“val_1”。访问数组的长度arr=(val_1val_2val_3)e......
  • 怎么遍历Java中可变数组
    如何遍历Java中的可变数组在Java中,可变数组是一种动态大小的数组,也称为动态数组或ArrayList。它可以根据需要自动调整大小,因此非常方便。遍历可变数组是经常使用的操作之一,本文将介绍如何遍历Java中的可变数组,并提供相应的代码示例。问题描述假设我们有一个可变数组,包含了一组学......
  • 一维数组之冒泡排序
    从b站上黑马程序员的C++课里学到的冒泡排序 1#include<iostream>2usingnamespacestd;3intmain()4{5intarr[6]={2,4,1,6,7,3};6for(inti=0;i<6;i++)//数组遍历7{8cout<<arr[i]<<"";9}1......
  • 数组
    一、数组1、数组的定义1)数组是相同类型数据的有序集合2)数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成3)每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问 2、数组的声明创建1)必须先声明数组变量,才能在程序中使用数组。声明数组变量的语......
  • 题解 序列合并
    题目链接首先不难想到,最小数的一定是\(a_1+b_1\),次小的数是\(a_1+b_2\)和\(a_2+b_1\)中小的。得出结论,若\(a_i+b_j\)是第\(k\)小,那么\(a_{i+1}+b_j\)和\(a_i+b_{j+1}\)有可能成为第\(k+1\)小。这是一个很优秀的性质,这意味着我们可以通过最小值推出次小值,再通过......
  • 【Javascript】数组扩展方法:根据key重新分组
    1//数组扩展:根据key重新分组2//field:按什么字段分组3Array.prototype.GroupByKey=function(field)4{5varoriginalArr=this6lettempArr=[]7letresultData=[]8for(leti=0;i<originalArr.length;i++)9{10......
  • python将excel内两列的日期合并
    原excel: 目标将year和month合并:year、month里放的1961等是数字,合并日期的时候需要把它们变成字符串再合并,采用.astype(str)#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Su@file:ceshi.py@time:2023/06/26@desc:"""importpandasaspd#打开excel......
  • 08-数组
    数组介绍数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用数据类型。即:数组就是一组数据。 ......
  • 2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和
    2023-07-18:给你一个正整数数组nums,请你移除最短子数组(可以为空),使得剩余元素的和能被p整除。不允许将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回-1。子数组定义为原数组中连续的一组元素。输入:nums=[3,1,4,2],p=6。输出:1。答......