Uvod v združitev Algoritmov za razvrščanje v javi

Algoritmi združitve sortiranja so v računalništvu zelo pomembni. Rezultat razvrščanja je razporeditev elementov seznama v določen vrstni red (naraščajoče ali padajoče). Razvrsti združitev je eden najučinkovitejših razpoložljivih algoritmov, saj temelji na konceptu delitve in osvajanja. Kot že ime pove, najprej razdelite večji problem na manjše težave, kot pa da rešite manjše, da boste rešili večji problem. V tem članku bomo razpravljali o algoritmih sortiranja združevanja na Javi. V konceptualnem smislu je razvrstitev združitev kombinacija dveh osnovnih algoritmov, imenovanih MERGE in MERGE_SORT, ki deluje na naslednji način:

  1. Nortortni seznam razdelite na n število podštevilk z enim elementom (n je skupno število elementov na nerazvrščenem seznamu).
  2. Sezname večkrat združite v razvrščene sezname, dokler ni le enega razvrščenega seznama.

Izvajanje algoritmov združevanja razvrstitve v Javi

Algoritem MERGE je postopek združevanja dveh razvrščenih seznamov v en razvrščen seznam.

Primer: Recimo, da obstajata dva seznama, tj. Seznam 1 (6, 3) in Seznam 2 (3, 1, 9).

1. Najprej razvrstite oba seznama.

Seznam 1

Seznam 2

Zdaj bomo na njej uporabili tehniko spajanja.

  1. Nato bomo ustvarili nov seznam velikosti m + n, kjer je m število elementov na seznamu 1 in n število elementov na seznamu 2.

Seznam 3

V našem primeru m = 2 in n = 3, torej m + n = 5.

  1. Zdaj imamo dvotočk. Prvi kazalec, ki kaže na prvi položaj seznama 1, in drugi kazalec, ki kaže na prvi položaj seznama 2.

4. Nato bomo primerjali vrednost obeh kazalcev. Kazalnik z manjšo vrednostjo kopirajte ta element v Seznam 3 in premaknite kazalec na desno od seznama z manjšo vrednostjo in z rezultatom seznama (tj. Seznama 1 in seznama 3).

5. Podobno ponovite korak 4 znova in znova.

Nadaljnje potovanje… ..

OPOMBA: Če se kateri koli od seznamov (tj. Seznama 1 ali seznama 2) v celoti premakne kot v zgornjem primeru, kopirajte celotno vsebino drugih seznamov iz kazalca na seznam rezultatov (tj. Seznam 3), kot sledi.

Algoritem in psevdokod

Dva algoritma, uporabljena v algoritmu spajanja, sta:

  • MERGE (ARR, F, M, L) je postopek, ki vključuje naslednje:
  1. ARR (F… .M) in ARR (M + 1… .L) sta razvrščena seznama.
  2. Dva razvrščena pod seznama združi v en ARR (F… .L).
  • SORT (ARR (), F, L) // tukaj je F prvi in ​​L zadnji indeks matrike.

Če (L> 1)

  1. Poiščite srednjo točko, da seznam razdelite na dve polovici:

srednja M = (F + L) / 2

  1. Razvrsti združevanje klicev za prvo polovico:

Kličite SORT (ARR, 1, M)

  1. Razvrsti združevanje klicev za drugo polovico:

Kličite SORT (ARR, M + 1, L)

  1. Združite polovice, razvrščene v korakih 2 in 3:

Pokliči MERGE (ARR, L, M, R)

Primer

Vzemimo primer matrike ARR (10, 6, 8, 5, 7, 3, 4). Algoritem Združevanja bomo uporabili za razvrščanje matrike s tehniko Divide and Conquer. Spodnjo sliko lahko vidimo, da se Array rekurzivno deli na dve polovici, dokler velikost ne postane 1. Ko velikost postane 1, pokličemo procese spajanja in začnemo združiti sezname nazaj, dokler se celotni seznam ne združi.

OPOMBA: Na spodnji sliki rdeče številke označujejo vrstni red obdelave korakov za oblikovanje sortirane matrike.

Koda programa:

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);
)
)

Izhod:

Zaključek - Združite Algoritme razvrščanja v Javi

Najboljše združitve, najslabše in povprečne časovne zahtevnosti so enake, zaradi česar je bolj učinkovit algoritem. Deluje hitreje kot druge tehnike sortiranja. Razvrsti spajanje je mogoče uporabiti za datoteke katere koli velikosti. Zaradi uporabe metode razdelite in osvojite je zelo vzporedljiva. Za razvoj močnih osnov računalništva vam svetujemo, da temeljito razumete različne algoritme razvrščanja.

Priporočeni članki

To je vodnik za združitev algoritmov razvrščanja algoritmov na Javi. Tukaj razpravljamo o izvajanju algoritmov sortiranja združevanja v javi in ​​s primeroma Algoritem in psevdokod. Ogledate si lahko tudi druge naše predlagane članke -

  1. Izbira Razvrsti v Javi
  2. Izjava primera na Javi
  3. Dostop do modifikatorjev v Javi
  4. Spajanje Razvrsti v JavaScript
  5. Kaj je izjava o primeru v JavaScript?
  6. Dostop do modifikatorjev v PHP
  7. Hitro razvrščanje algoritmov na Javi
  8. Celoten vodnik za razvrščanje v C # s primeri
  9. Funkcija razvrščanja v Pythonu s primeri
  10. Najboljših 6 algoritmov za razvrščanje v JavaScript