Увод у спајање алгоритам сортирања у Јави

Алгоритми сортирања спајања су веома важни у рачунарској науци. Резултат сортирања је распоређивање елемената листе према одређеном редослиједу (узлазно или силазно). Спајање сортирања је један од најефикаснијих алгоритама за сортирање који је доступан јер се заснива на концепту подела и освајања. Као што име говори, прво поделите већи проблем на мале проблеме него решите мање проблеме да бисте решили већи проблем. У овом чланку ћемо расправљати о спајању алгоритама сортирања на Јави. У концептуалном смислу, Мерге врста је комбинација два основна алгоритма звана МЕРГЕ и МЕРГЕ_СОРТ која функционише на следећи начин:

  1. Поделите несврстани списак на н број под-листа са једном ставком (н је укупан број елемената у несортираном списку).
  2. Подпописе непрестано спајајте у поређане пописи док не постоји само једна сортирана листа.

Примена алгоритама за сортирање спајања у Јави

МЕРГЕ алгоритам је поступак комбиновања две сортиране листе у једну сортирану листу.

Пример: Претпоставимо да постоје две листе, тј. Листа 1 (6, 3) и Листа 2 (3, 1, 9).

1. Прво сортирајте обе листе.

Листа 1

Лист 2

Сада ћемо на то применити технику спајања.

  1. Затим ћемо створити нову листу величине м + н где је м број елемената у Листи 1, а н је број елемената у листи 2.

Лист 3

У нашем случају м = 2 и н = 3, па је м + н = 5.

  1. Сада имамо двоточка. Први показивач који показује на прву позицију Листа 1 и Други показивач који усмерава на прву позицију Листе 2.

4. Затим ћемо упоредити вредност оба показивача. Показивач мање вредности, копирајте тај елемент у Листу 3 и померите показивач десно од листе са мањом вредности и резултирајуће листе (тј. Листа 1 и Листа 3).

5. Слично, изведите корак 4 поново и поново.

Даље путовање… ..

НАПОМЕНА: Ако се једна од листа (тј. Листа 1 или листа 2) у потпуности пређе као у горњем случају, копирајте целокупни садржај осталих листа из показивача на листу резултата (тј. Листа 3) на следећи начин.

Алгоритам и псеудо код

Два алгоритма која се користе у алгоритму спајања су:

  • МЕРГЕ (АРР, Ф, М, Л) је процес који претпоставља следеће:
  1. АРР (Ф… .М) и АРР (М + 1… .Л) су сортиране листе.
  2. Спаја две сортиране под-листе у један АРР (Ф… .Л).
  • СОРТ (АРР (), Ф, Л) // овде је Ф први, а Л последњи индекс матрице.

Ако (Л> 1)

  1. Пронађите средњу тачку да бисте листу поделили на две половине:

средња М = (Ф + Л) / 2

  1. Назовите сортирање спајања за прво полувреме:

Позовите СОРТ (АРР, 1, М)

  1. Позовите сортирање спајања за друго полувреме:

Позовите СОРТ (АРР, М + 1, Л)

  1. Спојите половине сортиране у 2. и 3. кораку:

Позовите МЕРГЕ (АРР, Л, М, Р)

Пример

Узмимо за пример АРР матрице (10, 6, 8, 5, 7, 3, 4). Користићемо алгоритам спајања да бисмо сортирали низ користећи његову технику поделе и освајања. На доњој слици можемо видети да је Арраи рекурзивно подељен на две половине док величина не постане 1. Једном када величина постане 1, зовемо процесе спајања и започињемо спајање листа назад док се комплетан списак не споји.

НАПОМЕНА: На слици испод, црвени бројеви означавају редослед обраде корака да би се формирао сортирани низ.

Програм Цоде:

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

Излаз:

Закључак - Спајање алгоритам сортирања у Јави

Спајање сортирања најбољих, најгорих и просечних временских сложености је исто што га чини ефикаснијим алгоритмом. Делује брже од осталих техника сортирања. Разврставање спајања може се применити на датотеке било које величине. Врло је паралелизабилна због употребе методе подели и освоји. Да бисте развили снажне основе у рачунарској науци, саветујемо вам да темељно разумете различите алгоритме сортирања.

Препоручени чланци

Ово је водич за спајање алгоритам за сортирање алгоритама у Јави. Овде смо расправљали о примени алгоритама сортирања спајања у јави и примерима алгоритма и псеудокода. Можете и да прођете кроз друге наше предложене чланке -

  1. Избор сортирања у Јави
  2. Изјава о случају на Јави
  3. Приступите модификаторима на Јави
  4. Спајање сортирања у ЈаваСцрипт-у
  5. Шта је Изјава о случају у ЈаваСцрипт-у?
  6. Приступите модификаторима на ПХП-у
  7. Брзо сортирање алгоритама на Јави
  8. Комплетан водич за сортирање у Ц # са примерима
  9. Функција сортирања у Питхон-у са примерима
  10. Топ 6 Алгоритам сортирања у ЈаваСцрипт-у

Категорија: