您的位置:首页 > 其它

两个有序数组合并成一个有序数组

2015-04-27 18:06 127 查看
public class ArraySort {

public static void main(String[] args) {
int[] a = {1,3,4};
int[] b = {2,3,5,6};

int[] c = mergeArray(a, b);

for(int n : c){
System.out.print(n+" ");
}
}

//合并数组
public static int[] mergeArray(int[] a , int[] b){
int result[] = new int[a.length + b.length];

if(checkSort(a) && checkSort(b)){
//说明ab数组都是有序的数组
//定义两个游标
int i=0,j=0,k=0;

while(i<a.length && j<b.length){
if(a[i] <= b[j]){
result[k++] = a[i++];
}else{
result[k++] = b[j++];
}
}

while(i < a.length){
//说明a数组还有剩余
result[k++] = a[i++];
}

while(j < b.length){
result[k++] = b[j++];
}
}

return result;

}

//检查一个数组是否是有序的

// 1 2 3
public static boolean checkSort(int[] a){
boolean flag = false;//默认不是有序的

for(int i=0;i<a.length-1;i++){
if(a[i] > a[i+1]){
//说明不是有序的
flag = false;
break;
}else{
flag = true;
}
}

return flag;
}
}
转自:http://blog.csdn.net/shenshen123jun/article/details/21657685
<pre name="code" class="java">package com.bi;/*** 两个有序数组合并成一个有序数组* */public class ArraySortTest {public static void main(String args[]){int[] n1= {1,3,5,6};int[] n2 = {2,3,4,9,0};int[] n=mergerArray(n1,n2);for(int a:n){System.out.print(a+"  ");}}public static int[] mergerArray(int[] n1,int[] n2){int[] result = new int[n1.length+n2.length];if(checkSort(n1)!=true){sort(n1);}else if(checkSort(n2)==false){sort(n2);}int i=0,j=0,k=0;while(i<n1.length && j<n2.length){if(n1[i]>=n2[j]){result[k++]=n2[j++];}else{result[k++]=n1[i++];}}while(i<n1.length){result[k++]=n1[i++];}while(j<n2.length){result[k++]=n2[j++];}return result;}public static boolean checkSort(int[] a){boolean flag = true;for(int i=0;i<a.length-1;i++){if(a[i]>a[i+1]){flag = false;break;}}return flag;}public static int[] sort(int[] a){for(int i=0;i<a.length;i++){for(int j=i+1;j<a.length;j++){if(a[i]>a[j]){int temp = a[i];a[i]=a[j];a[j]=temp;}}}return a;}}
最开始我用for循环合并数组,发现两个数组长度不一致,导致合并的数组少数,所以得用while循环判断数组的长度

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: