Uvod u spajanje algoritam sortiranja u Javi

Algoritmi sortiranja spajanja vrlo su važni u računalnoj znanosti. Rezultat razvrstavanja je organizirati elemente popisa prema određenom redoslijedu (uzlazno ili silazno). Spajanje sortiranja je jedan od najučinkovitijih dostupnih algoritama za razvrstavanje, jer se temelji na konceptu dijeljenja i osvajanja. Kao što ime sugerira, prvo podijelite veći problem na male probleme nego rješavajte manje probleme da biste riješili veći problem. U ovom ćemo članku raspravljati o spajanju algoritama sortiranja na Javi. Konceptualno, Spajanje sortiranja je kombinacija dvaju osnovnih algoritama zvanih MERGE i MERGE_SORT koji djeluju na sljedeći način:

  1. Podijelite nesvrstani popis na n broj potpopisa s jednom stavkom (n je ukupni broj elemenata u poništenom popisu).
  2. Ponavljano spajanje popisa u poredane popisa dok ne postoji samo jedan popis sortiran.

Primjena algoritama sortiranja spajanja u Javi

MERGE algoritam je postupak kombiniranja dva sortirana popisa u jedan sortirani popis.

Primjer: Pretpostavimo da postoje dva popisa, tj. Popis 1 (6, 3) i Popis 2 (3, 1, 9).

1. Prvo sortirajte oba popisa.

Popis 1

Popis 2

Sada ćemo na to primijeniti tehniku ​​spajanja.

  1. Zatim ćemo stvoriti novi popis veličine m + n gdje je m broj elemenata u Popisu 1, a n je broj elemenata u Popisu 2.

Popis 3

U našem slučaju m = 2 i n = 3, pa je m + n = 5.

  1. Sada imamo dvotočka. Prvi pokazivač usmjeren na prvo mjesto popisa 1 i drugi pokazivač koji upućuje na prvi položaj popisa 2.

4. Zatim ćemo usporediti vrijednost oba pokazivača. Pokazivač manje vrijednosti, kopirajte taj element u Listu 3 i pomaknite pokazivač desno od popisa s manjom vrijednošću i rezultatom popisa (tj. Popis 1 i Popis 3).

5. Slično, izvedite korak 4 iznova i iznova.

Daljnje putovanje… ..

NAPOMENA: Ako se jedan od popisa (tj. Popis 1 ili popis 2) u potpunosti prelazi kao u gornjem slučaju, kopirajte cijeli sadržaj ostalih popisa iz pokazivača na popis rezultata (tj. Popis 3) na sljedeći način.

Algoritam i pseudokod

Dva algoritma koja se koriste u algoritmu spajanja su:

  • MERGE (ARR, F, M, L) je proces koji pretpostavlja sljedeće:
  1. ARR (F… .M) i ARR (M + 1… .L) su razvrstani popisi.
  2. Spaja dvije sortirane podpopise u jedan ARR (F… .L).
  • SORT (ARR (), F, L) // ovdje je F prvi, a L zadnji indeks matrice.

Ako (L> 1)

  1. Pronađite srednju točku da biste popis podijelili na dvije polovice:

sredina M = (F + L) / 2

  1. Nazovite spajanje sortiranja za prvo polugodište:

Nazovite SORT (ARR, 1, M)

  1. Naziv spajanja sortiranja u drugoj polovici:

Nazovite SORT (ARR, M + 1, L)

  1. Spajanje polovice raspoređenih u koracima 2 i 3:

Nazovite MERGE (ARR, L, M, R)

Primjer

Uzmimo za primjer ARR matrice (10, 6, 8, 5, 7, 3, 4). Koristit ćemo algoritam spajanja da bismo sortirali niz koristeći njegovu tehniku ​​dijeljenja i osvajanja. Na donjoj slici možemo vidjeti da se Niz rekurzivno dijeli na dvije polovice dok veličina ne postane 1. Jednom kada veličina postane 1, pozovemo procese spajanja i započnemo spajanje popisa sve dok se cijeli popis ne spoji.

NAPOMENA: Na donjoj slici crveni brojevi označavaju redoslijed postupaka u obliku sortirane matrice.

Programski kod:

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

Izlaz:

Zaključak - Spajanje algoritam sortiranja u Javi

Najbolje su složite, najsloženije i prosječne vremenske složenosti su iste što ga čini učinkovitijim algoritmom. Djeluje brže od ostalih tehnika sortiranja. Vrsta spajanja može se primijeniti na datoteke bilo koje veličine. Vrlo je paralelizabilna zbog metode dijeljenja i osvajanja. Da biste razvili snažne osnove u računarskim znanostima, savjetujemo vam da temeljito razumijete različite algoritme sortiranja.

Preporučeni članci

Ovo je vodič za spajanje algoritama za sortiranje algoritama u Javi. Ovdje ćemo raspravljati o implementaciji algoritama sortiranja spajanja u javi i primjerice Algoritam i pseudokod. Možete i pregledati ostale naše predložene članke -

  1. Izbor sortiranja u Javi
  2. Izjava slučaja na Javi
  3. Pristupite modifikatorima na Javi
  4. Spoji sortiranje u JavaScript
  5. Što je Izjava o slučaju u JavaScript-u?
  6. Pristupite modifikatorima na PHP-u
  7. Brzo sortiranje algoritama na Javi
  8. Kompletan vodič za sortiranje u C # s primjerima
  9. Funkcija sortiranja u Python-u s primjerima
  10. Top 6 algoritma za razvrstavanje u JavaScript

Kategorija: