我必须实现一个名为 Merge.java 的 Java 程序,其中包含以下算法实现:
使用合并过程进行合并排序,合并前两个排序数组,然后合并第三个,依此类推。给定k个排序数组,每个数组有n 个元素,将它们组合成一个由 kn 个元素组成的单个排序数组。
程序应该生成一个二维数组 data ,维度为k × n ,存储k个随机生成的长度为n的整数的排序数组。每个算法都应该将数据作为输入,并将所有k个列表合并为一个长度为k × n的数组结果。
public class Merge {
int k = 2; int n = 4;
//generate a 2-dimensional array data with dimension k × n
int[][] data = new int[k][n];
int size = k*n;
//implementing merge procedure for merge sort
public static int[] merge(int data[][]){
// First, creating a new array to store the single sorted array
int res[] = new int[12];
然后我如何遍历数组并一一比较它们的元素并将它们按排序顺序插入新数组(res)中,这是按照问题的正确方法吗?
return res ;
}
public static void printArray(int[] arr){
for(int i : arr) {
System.out.printf("%d ", i);
}
System.out.printf("n");
}
public static void main(String[]args){
Merge obj = new Merge();
int[][] array = new int[][]{{12, 8, 1, 5},{ 10, 3, 4, 23}};
int [] finalSorted = merge(array);
printArray(finalSorted);
}
}
编辑添加:
都很有帮助..干杯..这是我到目前为止得到的:
但是,我的程序应该以二维形式返回它,并且数组可以超过两个:程序应该生成一个二维数组 data ,其维度为k × n ,存储k个随机生成的长度为n的整数的排序数组。每个算法都应该将数据作为输入,并将所有k个列表合并为一个长度为k × n的数组结果。下一步是什么?
//merge method take takes two arrays as parameters and returns the merge array
public int[] merge(int[] array1 , int [] array2){
int i=0,j=0,k = 0;
int m=array1.length;
int n=array2.length ;
// declaring a to be returned array after merging those two array1 & array2
int[] mergedArray = new int[m+n];
//comparing between two arrays , write it and compare next element and so on
while(i< m && j<n){
if(array1[i]<= array2[j]){
// if first element of array1 is <= then array2 then place array1 element in the mergedArray and viceversa
mergedArray[k] = array1[i];
i++;
}else{
mergedArray[j]=array2[j]; // opposite of above
j++;
}
k++ ;
}
// when run out of elements from one or other array, just write all the elements from the other
if(i<m){
for(int p=i ; p<m ; p++){
mergedArray[k] = array1[p];
k++;
}
} else {
for(int p=j ; p<n ; p++){
mergedArray[k]=array2[p];
k++;
}
}
return mergedArray;
}
}