实现算法来合并排序后的数组并将其返回
我必须实现一个名为Merge.java的Java程序,其中包含以下算法实现:
使用合并过程进行合并排序,合并前两个排序后的数组,然后合并到第三个数组中,依此类推。 给定k个排序数组,每个数组都有n个元素,这些元素将它们组合成kn元素的单个排序数组。
程序应该生成一个维数为k×n的二维数组数据,用于存储随机生成的长度为n的整数的k个排序数组。 每个算法应该将数据作为输入并将所有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);
}
}
编辑添加:
是有帮助的..cheers ..这是我到目前为止:
然而,我的程序应该返回二维数组,并且数组可以超过两个:程序应该生成一个维数为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;
}
}
尝试这个..
// size of C array must be equal or greater than
// sum of A and B arrays' sizes
public void merge(int[] A, int[] B, int[] C) {
int i, j, k, m, n;
i = 0;
j = 0;
k = 0;
m = A.length;
n = B.length;
while (i < m && j < n) {
if (A[i] <= B[j]) {
C[k] = A[i];
i++;
} else {
C[k] = B[j];
j++;
}
k++;
}
if (i < m) {
for (int p = i; p < m; p++) {
C[k] = A[p];
k++;
}
} else {
for (int p = j; p < n; p++) {
C[k] = B[p];
k++;
}
}
}
Refrance链接:http://www.algolist.net/Algorithms/Merge/Sorted_arrays
不要只是发布答案,让我给你一些正确方向的指针。
首先,你需要一个merge()方法,它将两个数组作为参数并返回合并数组。 这意味着返回的数组应该在merge()方法本身内声明和分配。
然后,只需要逐个查看两个数组即可。 如果a中的当前元素小于b的当前元素,则将其写入并从a中获取下一个元素。 如果来自b的当前元素小于a中的当前元素,则将其写入并从b获取下一个元素。 当你从一个或另一个数组中的元素用尽时,只需写出另一个元素的所有元素即可。
您将使用您生成的前两个数组调用此方法。 然后,您将使用第一次合并的结果和其余生成的数组之一调用它。 继续这样做直到你合并了所有生成的数组,一次一个。
然后你就完成了。
链接地址: http://www.djcxy.com/p/53489.html上一篇: Implement algorithm to merge sorted arrays and return it