Java >> Java tutorial >  >> Java

Flet to sorterede arrays i Java

Flet to sorterede arrays i Java | Array-programmer i Java – 11 | I det tidligere Java-program har vi udviklet programmer til at flette to arrays i Java. Nu i dette indlæg vil vi diskutere, hvordan man flette to sorterede arrays i Java.

Programbeskrivelse:- Skriv et program til at flette to sorterede arrays til et sorteret array i Java.

Sammenlægning af to arrays i Java kan gøres ved at bruge foruddefinerede metoder, eller ved at bruge Java-samlinger, eller vi kan gøre det manuelt ved at bruge loops. Efter sammenlægning kan vi sortere dem, eller vi kan sortere dem under sammenlægning.

Eksempel på sammenlægning af to int-arrays ,
Array1 =[10, 20, 30, 40, 50]
Array2 =[9, 18, 27, 36, 45]
Så skulle resultatet være,
Flettet Array =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]

Eksempel på sammenlægning af to strenge-arrays ,
Array1 =[C++, Java, Python]
Array2 =[CSS, HTML, JavaScript]
Så skulle resultatet være,
Merged Array =[C++, CSS, HTML , Java, JavaScript, Python]

Forskellige tilgange til at løse dette problem,
Metode1:- Først flet begge arrays, og sorter derefter det resulterende array.
Metode2:- Mens begge arrays flettes, tildel elementer i sorteret rækkefølge.

Flet to sorterede arrays i Java ved hjælp af Arrays.sort()

I denne metode skal du først flette begge arrays til det nye array og derefter sortere dem ved hjælp af en hvilken som helst sorteringsalgoritme. I slags to arrays i Java havde vi diskuteret forskellige tilgange til at fusionere arrayet. Efter at have flettet dem vil vi bruge Arrays.sort() metoden, og det meste af tiden giver bedre ydeevne sammenlignet med andre sorteringsalgoritmer. Lad os nu demonstrere det gennem et eksempel.

import java.util.Arrays;

public class CopyArray {

   public static void main(String[] args) {
      
      // array which should be merged
      int src1[] = {10, 20, 30, 40, 50};
      int src2[] = {9, 18, 27, 36, 45};
      
      // create new array 
      int newArray[] = new int[src1.length + src2.length];
      
      // Copy first to new array from 0 to src1.length
      System.arraycopy(src1, 0, newArray, 0, src1.length);
      // copy second array to new array
      System.arraycopy(src2, 0, newArray, src1.length, src2.length);
      
      // sort new array
      Arrays.sort(newArray);
      
      // display all array
      System.out.println("Array1 = " + Arrays.toString(src1));
      System.out.println("Array2 = " + Arrays.toString(src2));
      System.out.println("Merged Array = " 
                      + Arrays.toString(newArray));
   }
}

Output:-

Matrix1 =[10, 20, 30, 40, 50]
Matrix2 =[9, 18, 27, 36, 45]
Flettet Matrix =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]

I dette program har vi brugt toString()-metoden af java.util.Arrays-klassen for at vise arrayet, der er givet til at konvertere array til String.

Metode2

I denne metode,

a) Antag, at arrays er src1[] , og src2[]
b) Opret et nyt array (dest[] ) af størrelsen src1.length + src2.length
c) Gennemgå begge arrays, vælg mindre aktuelle elementer i src1[] og src2[] . Sammenlign det aktuelle element i begge arrays, kopier det mindre element blandt dem til den næste position i dest[] og gå videre i dest[] og det array, hvis element er valgt.
d) Hvis der er resterende elementer i src1 eller src2, så kopier dem i dest[]

import java.util.Arrays;

public class CopyArray {
   public static void main(String[] args) {

      // array which should be merged
      int src1[] = { 10, 20, 30, 40, 50 };
      int src2[] = { 9, 18, 27, 36, 45 };

      // resultant array
      int newArray[] = mergeSort(src1, src2);

      // display all array
      System.out.println("Array1 = " + Arrays.toString(src1));
      System.out.println("Array2 = " + Arrays.toString(src2));
      System.out.println("Merged Array = " 
                        + Arrays.toString(newArray));
   }

   private static int[] mergeSort(int[] src1, int[] src2) {
      // create new array
      int merge[] = new int[src1.length + src2.length];

      // variables
      int i = 0, j = 0, k = 0;

      // traverse both array
      while (i < src1.length && j < src2.length) {
         // Compare current element of both array.
         // Store smaller element and
         // increment index of that array
         if (src1[i] < src2[j])
            merge[k++] = src1[i++]; // first array
         else
            merge[k++] = src2[j++]; // second array
      }

      // Store remaining elements of first array
      while (i < src1.length) {
         merge[k++] = src1[i++];
      }

      // Store remaining elements of second array
      while (j < src2.length) {
         merge[k++] = src2[j++];
      }

      return merge;
   }
}

Output:-

Matrix1 =[10, 20, 30, 40, 50]
Matrix2 =[9, 18, 27, 36, 45]
Flettet Matrix =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]


Java tag