在Java中合并k个排序数组
给定了“n”个数组,假设我们采用三个数组,即整数类型的arr1[]、arr2[]和arr3[]。任务是以这样一种方式合并所有给定的整数数组,即结果数组仅在运行时排序。
让我们用例子来理解
输入 -
整数
a[]={21,22,23,24};
intb[]={28,31,35}
输出 -int结果[]={21,22,23,24,28,31,35}。
说明 -数组元素在添加之前进行比较,并根据它们在结果数组中的合适位置进行添加。
输入 -
整数
a[]={1,3,5,7,9,11,13};
intb[]={14,16,18}
intc[]={19,20,21,22}
输出 -intresult[]={1,3,5,7,9,11,13,14,16,18,19,20,21,22}。
说明 -数组元素在添加之前进行比较,并根据它们在结果数组中的合适位置进行添加。
以下程序中使用的方法如下-
输入三个整数数组比方说arr1[],arr2[]和arr3[]以及一个结果数组作为result[]并将其设置为对方法的调用作为mergeSortedArray(newint[][]{arr1,arr2,arr3})
方法内部mergeSortedArray(newint[][]{arr1,arr2,arr3})
创建一个变量作为priorityqueue类型的队列和一个变量作为total并将其设置为0。
从i到0开始循环FOR,直到数组的长度,并将数组桶中的元素添加到声明为队列的变量中,并将total设置为total+arr[i].length。
将m设置为0并声明result[]整数数组。
开始while=false然后将ArrayBucketac设置为,+1))queue.isEmpty()queue.poll()ac.index
返回结果
示例
import java.util.Arrays;
import java.util.PriorityQueue;
class ArrayBucket implements Comparable<ArrayBucket>{
int[] arr;
int index;
public ArrayBucket(int[] arr, int index){
this.arr= arr;
this.index= index;
}
@Override
public int compareTo(ArrayBucket o){
return this.arr[this.index] - o.arr[o.index];
}
}
public class testClass{
public static int[] mergeSortedArray(int[][] arr){
PriorityQueue<ArrayBucket> queue = new
PriorityQueue<ArrayBucket>();
int total = 0;
for (int i = 0; i < arr.length; i++){
queue.add(new ArrayBucket(arr[i], 0));
total = total + arr[i].length;
}
int m = 0;
int result[] = new int[total];
while (!queue.isEmpty()){
ArrayBucket ac = queue.poll();
result[m++] = ac.arr[ac.index];
if (ac.index < ac.arr.length - 1){
queue.add(new ArrayBucket(ac.arr,ac.index+ 1));
}
}
return result;
}
public static void main(String[] args){
int[] arr1 = { 1, 3, 5, 7 };
int[] arr2 = { 2, 4, 6, 8 };
int[] arr3 = { 0, 9, 10, 11 };
int[] result = mergeSortedArray(new int[][] { arr1, arr2, arr3 });
System.out.println("The final merged sorted array is :- "+Arrays.toString(result));
}
}输出结果如果我们运行上面的代码,它将生成以下输出
The final merged sorted array is :-[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]