两段有序数组原地归并

本文探讨如何在O(1)的空间复杂度下,将两个有序数组原地合并为一个有序数组。通过寻找合适的分割点,利用循环右移策略,将后半部分数组元素逐步有序插入到前半部分,最终实现整个数组的有序化。这种方法避免了传统的二分查找插入,提高了效率。
摘要由CSDN通过智能技术生成

假设数组是1,3,5,14,15,20,21,22,6,8,10,11,12,16,18,19

请用O(1)的时间将数组归并成有序数组。

这个题目最基础的想法就是把后面的数据每次一个的插入到前面已经有序的数组中。优化点在于在前面查找插入位置的时候可以用二分查找。

那么这个方法最快也是O(nlogn)的。有没有更快的算法呢?

看下面的思路:

既然从后半数组中找一个数插入到前面去,这种方法比较慢,那么能不能一段一段的插到前面呢?

从前一般的数组中找到第一个比后一半的第一个数字b大的数,记为a,

再从后一半中b之后的数组中找到第一个大于a的数字,记为c,

然后,把从a开

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值