Java将两个有序数组合成为⼀个有序数组基本思路
1.如果其中⼀个数组的元素均⼤于另⼀个数组的元素,则可以直接组合,不⽤拆分。
即:其中⼀个数组的第⼀个元素⼤于或者⼩于另⼀个数组的最后⼀个元素
2.若不满⾜1中的情况,则表明数组需要拆分,拆分的⽅法如下:
(1)拆分前,默认两个数组以及最终输出数组的索引均为0;
(2)将两个数组对应索引下的元素进⾏⽐较,⼩的⼀⽅放⼊最终数组中的当前索引下的位置,并使⼩的⼀⽅数组的索引+1;
(3)检查是否有数组已经遍历完毕,若有(即该数组的元素已经完全分配到结果数组中),则将另⼀个数组的剩余元素依次放⼊最终数组中,直接输出即可。 (4)最终数组的索引+1,并重复(2),直到两个数组均完成索引任务。
上图为假定的2-3步操作,A,B为要合并的数组,C为最终输出数组,Index为该次填充后的下次索引变换情况。
源代码
public int[] sortAndconnectArr(int FirstArr[], int SecondArr[]){
int[] ResultArr=new int[FirstArr.length+SecondArr.length];
//若两个Arr中其中⼀个Arr的都⽐另⼀个⼤,则能直接合成
if(FirstArr[FirstArr.length-1]<SecondArr[0]){
ResultArr=connectArr(FirstArr,SecondArr);
return ResultArr;
}
if(SecondArr[SecondArr.length-1]<FirstArr[0]){
ResultArr=connectArr(SecondArr,FirstArr);
return ResultArr;
}
//取FirstArr的第⼀个元素与SecondArr的第⼀个元素⽐较
//⼩的⼀⽅,放⼊ResultArr,并使其索引+1,继续⽐较,直到最后
int IndexOfFArr=0;
int IndexOfSArr=0;
int IndexOfRArr=0;
while (IndexOfFArr<=FirstArr.length-1||IndexOfSArr<=SecondArr.length-1){
if(FirstArr[IndexOfFArr]<SecondArr[IndexOfSArr]){
ResultArr[IndexOfRArr]=FirstArr[IndexOfFArr];
IndexOfFArr++;
}else {
ResultArr[IndexOfRArr]=SecondArr[IndexOfSArr];
IndexOfSArr++;
}js合并两个数组
//其中⼀⽅的数组已经全部遍历,将余下的数组部分写⼊ResultArr
//全部遍历完毕则因为IndexOfXX++的原因应该是正好等于Arr.Length
if(IndexOfFArr>FirstArr.length-1){
ResultArr=addArr(ResultArr,IndexOfRArr+1,SecondArr,IndexOfSArr);
return ResultArr;
}
if(IndexOfSArr>SecondArr.length-1){
ResultArr=addArr(ResultArr,IndexOfRArr+1,FirstArr,IndexOfFArr);
return ResultArr;
}
IndexOfRArr++;
}
return ResultArr;
}
public int[] connectArr(int FirstArr[], int SecondArr[]){
int[] ResultArr=new int[FirstArr.length+SecondArr.length];
System.arraycopy(FirstArr, 0, ResultArr, 0, FirstArr.length);
System.arraycopy(SecondArr, 0, ResultArr, FirstArr.length, SecondArr.length);
return ResultArr;
}
public int[] addArr(int ResultArr[],int RArrIndex,int AddArr[],int AArrIndex){
while(AArrIndex<=AddArr.length-1){
ResultArr[RArrIndex]=AddArr[AArrIndex];
AArrIndex++;
RArrIndex++;
}
return ResultArr;
}
验证函数
public static void main(String[] args) {
int a[]={1,2,4,55,66,113,157,182,192,201};
int b[]={40,45,66,70,120,140,160,200,1655,1732};
int c[]=sortAndconnectArr(a,b);
for(int i=0;i<c.length-1;i++){
System.out.print(c[i]+" ");
}
}
结果预览
1 2 4 40 45 55 66 66 70 113 120 140 157 160 182 192 200 1655 1732 Process finished with exit code 0
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论