Úvod do sloučení algoritmů třídění v Javě

Algoritmy slučování třídění jsou v informatice velmi důležité. Výstupem třídění je uspořádat prvky seznamu do určitého pořadí (buď vzestupně nebo sestupně). Sloučit řazení je jeden z nejúčinnějších dostupných algoritmů třídění, protože je založen na konceptu dělení a dobývání. Jak název napovídá, nejprve rozdělte větší problém na malé problémy, než vyřešte menší problémy, abyste vyřešili větší problém. V tomto článku budeme hovořit o sloučení třídění algoritmů v Javě. Koncepčně je sloučení třídění kombinací dvou základních algoritmů nazývaných MERGE a MERGE_SORT, které fungují takto:

  1. Rozdělte netříděný seznam na n počet dílčích seznamů jednotlivých položek (n je celkový počet prvků v netříděném seznamu).
  2. Opakovaně slučujte seznamy do tříděných seznamů, dokud nebude k dispozici pouze jeden seznam.

Implementace algoritmů sloučení třídění v Javě

Algoritmus MERGE je postup kombinování dvou tříděných seznamů do jednoho tříděného seznamu.

Příklad: Předpokládejme, že existují dva seznamy, tj. Seznam 1 (6, 3) a Seznam 2 (3, 1, 9).

1. Nejprve seřaďte oba seznamy.

Seznam 1

Seznam 2

Nyní na to použijeme techniku ​​slučování.

  1. Poté vytvoříme nový seznam velikostí m + n, kde m je počet prvků v seznamu 1 a n je počet prvků v seznamu 2.

Seznam 3

V našem případě m = 2 an = 3, takže m + n = 5.

  1. Nyní máme dva ukazatele. První ukazatel směřující na první pozici seznamu 1 a druhý ukazatel směřující na první pozici seznamu 2.

4. Potom porovnáme hodnotu obou ukazatelů. Ukazatel s menší hodnotou zkopírujte tento prvek do Seznamu 3 a přesuňte ukazatel vpravo od seznamu s menší hodnotou a výsledným seznamem (tj. Seznam 1 a Seznam 3).

5. Podobně proveďte krok 4 znovu a znovu.

Další traverz… ..

POZNÁMKA: Pokud jeden ze seznamů (tj. Seznam 1 nebo seznam 2) zcela projde jako ve výše uvedeném případě, zkopírujte celý obsah ostatních seznamů z ukazatele do seznamu výsledků (tj. Seznam 3) následujícím způsobem.

Algoritmus a pseudokód

Dva algoritmy používané v Merge Algorithm jsou:

  • MERGE (ARR, F, M, L) je proces, který předpokládá následující:
  1. ARR (F… .M) a ARR (M + 1… .L) jsou tříděné seznamy.
  2. Sloučí dva tříděné seznamy do jednoho ARR (F… .L).
  • SORT (ARR (), F, L) // zde F je první a L je poslední index pole.

Pokud (L> 1)

  1. Najděte prostřední bod pro rozdělení seznamu na dvě poloviny:

střední M = (F + L) / 2

  1. Volat sloučení třídění pro první polovinu:

Volat SORT (ARR, 1, M)

  1. Volání slučování pro druhou polovinu:

Volat SORT (ARR, M + 1, L)

  1. Sloučit poloviny seřazené v kroku 2 a 3:

Volejte MERGE (ARR, L, M, R)

Příklad

Vezměme si příklad pole ARR (10, 6, 8, 5, 7, 3, 4). Algoritmus sloučení použijeme k třídění Array pomocí jeho techniky rozdělení a dobytí. Vidíme níže uvedený obrázek, že pole je rekurzivně rozděleno na dvě poloviny, dokud se velikost nestane 1. Jakmile se velikost stane 1, zavoláme slučovací procesy a začneme slučovací seznamy zpět, dokud nebude úplný seznam sloučen.

POZNÁMKA: Na obrázku níže čísla červeně označují pořadí, ve kterém jsou kroky zpracovány, aby vytvořily tříděné pole.

Programový kód:

import java.util.Scanner;
public class mergeSort (
// merges two sublists of arr().
// first list is arr(l..m) // second list is arr(m+1..r) void mergeAlgo(int arr(), int l, int m, int r)
(
// find the sizes of two lists to be merged
int n1 = m - l + 1;
int n2 = r - m;
// create temp array
int L() = new int (n1);
int R() = new int (n2);
// copy data to temp arrays
for (int i=0; i L(i) = arr(l + i);
for (int j=0; j R(j) = arr(m + 1+ j);
/* merge the temp arrays */
// initial indexes of first and second list
int i = 0, j = 0;
// initial index of merged sub list
int k = l;
while (i < n1 && j < n2)
(
if (L(i) <= R(j))
(
arr(k) = L(i);
i++;
)
else
(
arr(k) = R(j);
j++;
)
k++;
)
// copy remaining elements of L() if any
while (i < n1)
(
arr(k) = L(i);
i++;
k++;
)
// copy remaining elements of R() if any
while (j < n2)
(
arr(k) = R(j);
j++;
k++;
)
)
// main function that sorts arr(l..r) using mergeAlgo()
void sort(int arr(), int l, int r)
(
if (l < r)
(
// find the middle index
int m = (l+r)/2;
// sort first and second halves
sort(arr, l, m);
sort(arr, m+1, r);
// merge the above two sorted halves
mergeAlgo(arr, l, m, r);
)
)
/* A function to print list of size n */
static void printArray(int arr())
(
int n = arr.length;
for (int i=0; i System.out.print(arr(i) + " ");
System.out.println();
)
public static void main(String args())
(
Scanner myObj = new Scanner(System.in);
System.out.println("Enter the size of list:");
int N = myObj.nextInt();
System.out.println("Enter the elements in list separated by space:");
int arr() = new int(N);
for(int i=0; i arr(i) = myObj.nextInt();
)
mergeSort mg = new mergeSort();
mg.sort(arr, 0, arr.length-1);
System.out.println("\nSorted list:");
printArray(arr);
)
)
import java.util.Scanner;
public class mergeSort (
// merges two sublists of arr().
// first list is arr(l..m) // second list is arr(m+1..r) void mergeAlgo(int arr(), int l, int m, int r)
(
// find the sizes of two lists to be merged
int n1 = m - l + 1;
int n2 = r - m;
// create temp array
int L() = new int (n1);
int R() = new int (n2);
// copy data to temp arrays
for (int i=0; i L(i) = arr(l + i);
for (int j=0; j R(j) = arr(m + 1+ j);
/* merge the temp arrays */
// initial indexes of first and second list
int i = 0, j = 0;
// initial index of merged sub list
int k = l;
while (i < n1 && j < n2)
(
if (L(i) <= R(j))
(
arr(k) = L(i);
i++;
)
else
(
arr(k) = R(j);
j++;
)
k++;
)
// copy remaining elements of L() if any
while (i < n1)
(
arr(k) = L(i);
i++;
k++;
)
// copy remaining elements of R() if any
while (j < n2)
(
arr(k) = R(j);
j++;
k++;
)
)
// main function that sorts arr(l..r) using mergeAlgo()
void sort(int arr(), int l, int r)
(
if (l < r)
(
// find the middle index
int m = (l+r)/2;
// sort first and second halves
sort(arr, l, m);
sort(arr, m+1, r);
// merge the above two sorted halves
mergeAlgo(arr, l, m, r);
)
)
/* A function to print list of size n */
static void printArray(int arr())
(
int n = arr.length;
for (int i=0; i System.out.print(arr(i) + " ");
System.out.println();
)
public static void main(String args())
(
Scanner myObj = new Scanner(System.in);
System.out.println("Enter the size of list:");
int N = myObj.nextInt();
System.out.println("Enter the elements in list separated by space:");
int arr() = new int(N);
for(int i=0; i arr(i) = myObj.nextInt();
)
mergeSort mg = new mergeSort();
mg.sort(arr, 0, arr.length-1);
System.out.println("\nSorted list:");
printArray(arr);
)
)
import java.util.Scanner;
public class mergeSort (
// merges two sublists of arr().
// first list is arr(l..m) // second list is arr(m+1..r) void mergeAlgo(int arr(), int l, int m, int r)
(
// find the sizes of two lists to be merged
int n1 = m - l + 1;
int n2 = r - m;
// create temp array
int L() = new int (n1);
int R() = new int (n2);
// copy data to temp arrays
for (int i=0; i L(i) = arr(l + i);
for (int j=0; j R(j) = arr(m + 1+ j);
/* merge the temp arrays */
// initial indexes of first and second list
int i = 0, j = 0;
// initial index of merged sub list
int k = l;
while (i < n1 && j < n2)
(
if (L(i) <= R(j))
(
arr(k) = L(i);
i++;
)
else
(
arr(k) = R(j);
j++;
)
k++;
)
// copy remaining elements of L() if any
while (i < n1)
(
arr(k) = L(i);
i++;
k++;
)
// copy remaining elements of R() if any
while (j < n2)
(
arr(k) = R(j);
j++;
k++;
)
)
// main function that sorts arr(l..r) using mergeAlgo()
void sort(int arr(), int l, int r)
(
if (l < r)
(
// find the middle index
int m = (l+r)/2;
// sort first and second halves
sort(arr, l, m);
sort(arr, m+1, r);
// merge the above two sorted halves
mergeAlgo(arr, l, m, r);
)
)
/* A function to print list of size n */
static void printArray(int arr())
(
int n = arr.length;
for (int i=0; i System.out.print(arr(i) + " ");
System.out.println();
)
public static void main(String args())
(
Scanner myObj = new Scanner(System.in);
System.out.println("Enter the size of list:");
int N = myObj.nextInt();
System.out.println("Enter the elements in list separated by space:");
int arr() = new int(N);
for(int i=0; i arr(i) = myObj.nextInt();
)
mergeSort mg = new mergeSort();
mg.sort(arr, 0, arr.length-1);
System.out.println("\nSorted list:");
printArray(arr);
)
)
import java.util.Scanner;
public class mergeSort (
// merges two sublists of arr().
// first list is arr(l..m) // second list is arr(m+1..r) void mergeAlgo(int arr(), int l, int m, int r)
(
// find the sizes of two lists to be merged
int n1 = m - l + 1;
int n2 = r - m;
// create temp array
int L() = new int (n1);
int R() = new int (n2);
// copy data to temp arrays
for (int i=0; i L(i) = arr(l + i);
for (int j=0; j R(j) = arr(m + 1+ j);
/* merge the temp arrays */
// initial indexes of first and second list
int i = 0, j = 0;
// initial index of merged sub list
int k = l;
while (i < n1 && j < n2)
(
if (L(i) <= R(j))
(
arr(k) = L(i);
i++;
)
else
(
arr(k) = R(j);
j++;
)
k++;
)
// copy remaining elements of L() if any
while (i < n1)
(
arr(k) = L(i);
i++;
k++;
)
// copy remaining elements of R() if any
while (j < n2)
(
arr(k) = R(j);
j++;
k++;
)
)
// main function that sorts arr(l..r) using mergeAlgo()
void sort(int arr(), int l, int r)
(
if (l < r)
(
// find the middle index
int m = (l+r)/2;
// sort first and second halves
sort(arr, l, m);
sort(arr, m+1, r);
// merge the above two sorted halves
mergeAlgo(arr, l, m, r);
)
)
/* A function to print list of size n */
static void printArray(int arr())
(
int n = arr.length;
for (int i=0; i System.out.print(arr(i) + " ");
System.out.println();
)
public static void main(String args())
(
Scanner myObj = new Scanner(System.in);
System.out.println("Enter the size of list:");
int N = myObj.nextInt();
System.out.println("Enter the elements in list separated by space:");
int arr() = new int(N);
for(int i=0; i arr(i) = myObj.nextInt();
)
mergeSort mg = new mergeSort();
mg.sort(arr, 0, arr.length-1);
System.out.println("\nSorted list:");
printArray(arr);
)
)
import java.util.Scanner;
public class mergeSort (
// merges two sublists of arr().
// first list is arr(l..m) // second list is arr(m+1..r) void mergeAlgo(int arr(), int l, int m, int r)
(
// find the sizes of two lists to be merged
int n1 = m - l + 1;
int n2 = r - m;
// create temp array
int L() = new int (n1);
int R() = new int (n2);
// copy data to temp arrays
for (int i=0; i L(i) = arr(l + i);
for (int j=0; j R(j) = arr(m + 1+ j);
/* merge the temp arrays */
// initial indexes of first and second list
int i = 0, j = 0;
// initial index of merged sub list
int k = l;
while (i < n1 && j < n2)
(
if (L(i) <= R(j))
(
arr(k) = L(i);
i++;
)
else
(
arr(k) = R(j);
j++;
)
k++;
)
// copy remaining elements of L() if any
while (i < n1)
(
arr(k) = L(i);
i++;
k++;
)
// copy remaining elements of R() if any
while (j < n2)
(
arr(k) = R(j);
j++;
k++;
)
)
// main function that sorts arr(l..r) using mergeAlgo()
void sort(int arr(), int l, int r)
(
if (l < r)
(
// find the middle index
int m = (l+r)/2;
// sort first and second halves
sort(arr, l, m);
sort(arr, m+1, r);
// merge the above two sorted halves
mergeAlgo(arr, l, m, r);
)
)
/* A function to print list of size n */
static void printArray(int arr())
(
int n = arr.length;
for (int i=0; i System.out.print(arr(i) + " ");
System.out.println();
)
public static void main(String args())
(
Scanner myObj = new Scanner(System.in);
System.out.println("Enter the size of list:");
int N = myObj.nextInt();
System.out.println("Enter the elements in list separated by space:");
int arr() = new int(N);
for(int i=0; i arr(i) = myObj.nextInt();
)
mergeSort mg = new mergeSort();
mg.sort(arr, 0, arr.length-1);
System.out.println("\nSorted list:");
printArray(arr);
)
)

Výstup:

Závěr - Sloučit algoritmy třídění v Javě

Sloučit řazení nejlepší, nejhorší a průměrná doba složitosti času jsou stejné, což z něj činí efektivnější algoritmus. Funguje to rychleji než jiné techniky třídění. Sloučit řazení lze použít na soubory libovolné velikosti. Je vysoce paralelizovatelný díky použití metody dělení a dobytí. Chcete-li vyvinout silné základy v oblasti informatiky, doporučujeme vám důkladně porozumět různým třídicím algoritmům.

Doporučené články

Toto je průvodce slučováním třídění algoritmů v Javě. Zde diskutujeme implementaci sloučení třídění algoritmů v javě a algoritmy a pseudokód s příkladem. Můžete také projít naše další doporučené články -

  1. Výběr Seřadit v Javě
  2. Case Case v Javě
  3. Přístup k modifikátorům v Javě
  4. Sloučit Seřadit v JavaScriptu
  5. Co je to Case Case v JavaScriptu?
  6. Přístup modifikátory v PHP
  7. Algoritmy rychlého třídění v Javě
  8. Kompletní průvodce tříděním v C # s příklady
  9. Funkce třídění v Pythonu s příklady
  10. Top 6 algoritmů třídění v JavaScriptu

Kategorie: