[英]merge two arrays into one array that is in ascending order not working correctly. Java
I am trying to sort two arrays into one array. 我正在尝试将两个数组排序为一个数组。 But I am having a few problems.
但是我有一些问题。 it's not sorting correctly.
它没有正确排序。 I have attached the files, code and the output.
我已经附上了文件,代码和输出。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class MArray {
public static void mergeA(long[] A, long[] B) {
long [] merged = new long[A.length + B.length ];
int indexFirst = 0, indexSecond = 0, indexMerge = 0;
while (indexFirst < A.length && indexSecond < B.length) {
if (A[indexFirst] <= B[indexSecond]) {
merged[indexMerge++] = A[indexFirst++];
}
else {
merged[indexMerge++] = B[indexSecond++];
}
}
System.out.print("\n");
System.out.println("Here is your merged array: " );
for (int i = 0; i < merged.length; i++) {
System.out.print(merged[i] + ", ");
}
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
long array1[] = null;
long array2[] = null;
Scanner Scanscan = new Scanner(System.in);
System.out.print("Input filename: ");
String filename = Scanscan.nextLine();
File inputFile = new File(filename);
Scanner reader = new Scanner(inputFile);
int i = 0;
long array[] = new long[20];
while(reader.hasNext())
{
array[i] = reader.nextInt();
i++;
}
array1 = new long[i];
System.arraycopy(array, 0, array1, 0, i);
Arrays.sort(array1);
for (int i1 = 0; i1 < array1.length; i1++) {
System.out.print(array1[i1] + " ");
}
System.out.println( "\n");
System.out.println("Please enter your second file name: ");
String filename2 = Scanscan.nextLine();
File inputFile2 = new File(filename2);
Scanner reader2 = new Scanner(inputFile2);
int i1 = 0;
long temp1[] = new long[20];
while(reader2.hasNext())
{
temp1[i1] = reader2.nextInt();
i1++;
}
array2 = new long[i1];
System.arraycopy(temp1, 0, array2, 0, i1);
Arrays.sort(array2);
for (int i11 = 0; i11 < array2.length; i11++) {
System.out.print(array2[i11] + " ");
}
mergeA(array1, array2);
}
}
input 1 2 4 6 8 10 输入1 2 4 6 8 10
input 2 12 14 16 18 20 22 24 输入2 12 14 16 18 20 22 24
output Input filename: input1_1.txt 2 4 6 8 10 输出输入文件名:input1_1.txt 2 4 6 8 10
Please enter your second file name:
input1_2.txt
12 14 16 18 20 22 24
Here is your merged array:
2, 4, 6, 8, 10, 0, 0, 0, 0, 0, 0, 0,
If you really have the requirement of having un-sorted arrays as potential input, you could use Merge Sort to sort the two individual arrays, and then do one last Merge operation to join the two sorted arrays. 如果确实需要将未排序的数组作为潜在输入,则可以使用“合并排序”对两个单独的数组进行排序,然后执行最后一个“合并”操作以将两个排序后的数组连接在一起。
Here is a test run with your initial non-sorted input: 这是您的初始未排序输入的测试运行:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class MArray {
public static void mergeA(long[] A, long[] B) {
long [] merged = new long[A.length + B.length ];
int indexFirst = 0, indexSecond = 0, indexMerge = 0;
while (indexFirst < A.length && indexSecond < B.length) {
if (A[indexFirst] <= B[indexSecond]) {
merged[indexMerge++] = A[indexFirst++];
}
else {
merged[indexMerge++] = B[indexSecond++];
}
}
//get remaining items if arrays were not equal lengths
while (indexFirst < A.length){
merged[indexMerge++] = A[indexFirst++];
}
while (indexSecond < B.length){
merged[indexMerge++] = B[indexSecond++];
}
System.out.print("\n");
System.out.println("Here is your merged array: " );
for (int i = 0; i < merged.length; i++) {
System.out.print(merged[i] + ", ");
}
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
long array1[] = null;
long array2[] = null;
/*
Scanner Scanscan = new Scanner(System.in);
System.out.print("Input filename: ");
String filename = Scanscan.nextLine();
File inputFile = new File(filename);
Scanner reader = new Scanner(inputFile);
int i = 0;
while(reader.hasNextInt())
{
array1[i++] = reader.nextInt();
}
for (int i1 = 0; i1 < array1.length; i1++) {
System.out.print(array1[i1] + " ");
}
System.out.println( "\n");
System.out.println("Please enter your second file name: ");
String filename2 = Scanscan.nextLine();
File inputFile2 = new File(filename2);
Scanner reader2 = new Scanner(inputFile2);
int i1 = 0;
while(reader2.hasNextInt()){
array2[i1++] = reader2.nextInt();
}
System.out.println(" ");
for (int i11 = 0; i11 < array2.leng= th; i11++) {
System.out.print(array2[i11] + " ");
}
*/
long[] a1 = new long[]{1, 9, 6, 11, 12, 4, 7, 2};
long[] a2 = new long[]{2, 8, 3, 13, 5, 10};
mergeSort(a1);
mergeSort(a2);
array1 = new long[a1.length];
System.arraycopy(a1, 0, array1, 0, a1.length);
array2 = new long[a2.length];
System.arraycopy(a2, 0, array2, 0, a2.length);
mergeA(array1, array2);
}
static void mergeSort(long[] array){
long[] helper = new long[array.length];
mergeSort(array, helper, 0, array.length - 1);
}
static void mergeSort(long[] array, long[] helper, int low, int high){
if (low < high){
int middle = (low + high) / 2;
mergeSort(array, helper, low, middle);
mergeSort(array, helper, middle + 1, high);
merge(array, helper, low, middle, high);
}
}
static void merge(long[] array, long[] helper, int low, int middle, int high){
for (int i = low; i <= high; i++){
helper[i] = array[i];
}
int helperLeft = low;
int helperRight = middle + 1;
int current = low;
while (helperLeft <= middle && helperRight <= high){
if (helper[helperLeft] <= helper[helperRight]){
array[current++] = helper[helperLeft++];
}
else{
array[current++] = helper[helperRight++];
}
}
while (helperLeft <= middle){
array[current++] = helper[helperLeft++];
}
}
}
Output: 输出:
Here is your merged array:
1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.