归并(两个有序数组合成一个)

/**
    * 归并
    * 给定两个有序的数组,在合成一个有序数组的过程中,排序
    * 参数:两个数组及长度
    */
    public static void Merge_Sort_Func(int[] arrA,int a,int[] arrB,int b){
        int[] arrC = new int[a+b];
        int i,j,k;
        i = j = k = 0;
        while(i<a && j<b){
            if(arrA[i]>arrB[j]){
                arrC[k++] = arrB[j++];
            }else{
                arrC[k++] = arrA[i++];
            }
        }
        while(i<a){
            arrC[k++] = arrA[i++];
        }
        while(j<b){
            arrC[k++] = arrB[j++];
        }
        for(int h=0;h<=arrC.length-1;h++){
            System.out.println(arrC[h]);
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 归并两个有序表la和lb成一个新的有序表lc,就是将la和lb中的元素按照非递减的顺序合并到lc中。具体操作是,从la和lb中分别取出最小的元素进行比较,将较小的元素放入lc中,并将该元素所在的表的指针向后移动一位,直到la和lb中的元素全部放入lc中。最终得到的lc也是一个非递减有序的表。 ### 回答2: 首先,我们需要了解“归并排序”的基本思想:将一个序列分成两部分,对两部分分别进行排序,然后将两个有序的子序列合并一个有序序列。对于两个有序表la和lb,即为我们要将它们合并一个新的有序表lc。 具体实现过程如下: 1. 定义指向待合并序列la和lb的指针i和j,以及指向新序列lc的指针k。 2. 比较la[i]和lb[j]的大小关系,将较小的元素赋值给lc[k],指针k和对应的指针i或j依次后移一位。 3. 重复步骤2,直到某一序列遍历完毕。 4. 将另一序列中剩余的元素全部添加到lc中。 5. 返回新序列lc。 我们还可以使用递归的方式实现归并排序。具体步骤如下: 1. 将待排序序列分成两个,直到每部分只有一个元素。 2. 递归地将每个子序列排序、合并,形成有序序列,返回给上一层递归。 3. 对于上一层递归返回的两个有序序列,再次进行合并。 4. 返回整个序列的有序结果。 归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。在数据量较大时,归并排序具有较高的效率和稳定性,因此广泛应用于排序算法中。 ### 回答3: 归并两个有序表需要一个合并过程,首先我们需要创建一个长度为la+lb的新有序表lc。将la和lb的首元素进行比较,将较小的元素放入lc的首元素位置,同时移动该元素所在表的指针到下一个位置。然后再将lc的下一个位置与剩余的la和lb的首元素继续进行比较,将较小的元素放入lc的下一个位置,直到将la和lb的元素全部放入lc中。 在具体实现时,需要定义三个指针,两个分别指向la和lb的首元素,第三个指针指向lc的首元素。比较两个指针所指的元素的大小,将较小的元素放入lc的首元素位置,并移动该元素所在表的指针到下一个位置。然后继续比较两个表头元素,将较小的元素放入lc的下一个位置,依次重复该过程,直到遍历完la和lb的所有元素,此时,lc就是归并后的有序表了。 归并排序利用这种合并有序表的思想进行排序,将原始序列分成若干个子序列,先将每个子序列单独排序,然后再将有序的子序列合并一个大的有序序列。归并排序的时间复杂度为O(nlogn),具有稳定性和适用于适合数据量大而分布较为均匀的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值