对两个有序数组进行合并
时间:2022-04-29
本文章向大家介绍对两个有序数组进行合并,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述:
数组arr[0...mid-1]和arr[mid..n-1]是各自有序的,对数组arr[0..n-1]的两个有序段进行合并,得到arr[0..n-1]整体。要求空间复杂度为O(1)
eg:{1,3,5,7,2,4,6}合并成{1,2,3,4,5,6,7}
思路:
方法一
很显然,看到这个题目就想到了归并中的合并算法,时间复杂度为O(n),但是很可惜空间复杂度也是O(n)不满足要求。但是还是作为一种解决方案提出来吧,具体实现代码就不列了。
方法二
此外,对于部分有序的我们能想到的是插入排序,但是本题是两段部分有序合并在一起,进行插入排序的话时间复杂度也是O(n2),空间复杂度满足条件。
方法三
本方法的思路有点类似简单排序的,具体思路如下:
- 遍历数组中下标为0~mid-1的元素,将遍历到的元素的值与arr[mid]比较,若arr[i]大于arr[mid],则交换,即第i次排序,将其最右边的最小的值放到arr[i]的位子上,
- 然后在后半段中将arr[mid]排序到正常的位置上去。
1 public static void merge(int [] arr,int mid){
2 int len = arr.length ;
3 int temp ;
4 for(int i = 0 ; i < mid ; i++){
5 if(arr[i] > arr[mid]){
6 temp = arr[i] ;
7 arr[i] = arr[mid] ;
8 arr[mid] = arr[i] ;
9 }
10
11 for(int j = mid + 1 ; j < len ; j++){
12 if(arr[j] < arr[j-1]){
13 temp = arr[j] ;
14 arr[j] = arr[j-1] ;
15 arr[j-1] = arr[j] ;
16 }else{
17 break ;
18 }
19 }
20 }
- Server Tomcat v7.0 Server at localhost failed to start.
- Ovs+Dpdk简单实践
- Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)
- 创建基于MailKit和MimeKit的.NET基础邮件服务
- 把一个矩阵行优先展成一个向量,numpy.ravel() vs numpy.flatten()区别
- dataframe插入数据报错SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a
- python 对矩阵进行复制操作 np.repeat 与 np.tile区别
- python标准异常:中英文对比
- 激活windows10转到电脑设置的水印消失3种方法总结
- Android 运行时权限及APP适配
- python如何保存矩阵,保存matrix,保存numpy.ndarray
- SDP(12): MongoDB-Engine - Streaming
- .NET Core开源API网关 – Ocelot中文文档
- Selenium的使用方法简介
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法