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

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

Мерге сорт је алгоритам за сортирање заснован на техници „дели и освоји“. То је један од најефикаснијих алгоритама за сортирање.





шта је црц сха десним кликом

У овом чланку ћете научити о раду алгоритма сортирања спајањем, алгоритму сортирања спајања, његовој временској и просторној сложености и његовој имплементацији у различитим програмским језицима као што су Ц ++, Питхон и ЈаваСцрипт.





Како функционише алгоритам за сортирање спајања?

Спајање сортирањем ради на принципу завади па владај. Сортирање спајањем више пута разбија низ у два једнака низа све док се сваки подниз не састоји од једног елемента. Коначно, сви ти низови су спојени тако да се резултујући низ сортира.





Овај концепт се може ефикасније објаснити уз помоћ примера. Узмимо у обзир неразврстани низ са следећим елементима: {16, 12, 15, 13, 19, 17, 11, 18}.

Овде алгоритам сортирања спајањем дели низ на две половине, позива себе за две половине, а затим спаја две сортиране половине.



Алгоритам спајања сортирања

Испод је алгоритам сортирања спајања:

MergeSort(arr[], leftIndex, rightIndex)
if leftIndex >= rightIndex
return
else
Find the middle index that divides the array into two halves:
middleIndex = leftIndex + (rightIndex-leftIndex)/2
Call mergeSort() for the first half:
Call mergeSort(arr, leftIndex, middleIndex)
Call mergeSort() for the second half:
Call mergeSort(arr, middleIndex+1, rightIndex)
Merge the two halves sorted in step 2 and 3:
Call merge(arr, leftIndex, middleIndex, rightIndex)

Повезано: Шта је рекурзија и како је користите?





Временска и просторна сложеност алгоритма за сортирање спајања

Алгоритам за сортирање спајањем може се изразити у облику следеће релације понављања:

Т (н) = 2Т (н / 2) + О (н)





Након што решите ову релацију понављања користећи мастер теорему или методу стабла понављања, добићете решење као О (н логн). Дакле, временска сложеност алгоритма сортирања спајањем је О (н пријава) .

Најбоља временска сложеност врсте спајања: О (н пријава)

Сложеност просечног времена за сортирање врсте спајања: О (н пријава)

Најгора временска сложеност врсте спајања: О (н пријава)

Повезан: Шта је Биг-О нотација?

Сложеност помоћног простора алгоритма сортирања спајања је На) као н помоћни простор је потребан у имплементацији сортирања стапањем.

Ц ++ Имплементација алгоритма за сортирање спајања

Испод је Ц ++ имплементација алгоритма сортирања спајањем:

// C++ implementation of the
// merge sort algorithm
#include
using namespace std;
// This function merges two subarrays of arr[]
// Left subarray: arr[leftIndex..middleIndex]
// Right subarray: arr[middleIndex+1..rightIndex]
void merge(int arr[], int leftIndex, int middleIndex, int rightIndex)
{
int leftSubarraySize = middleIndex - leftIndex + 1;
int rightSubarraySize = rightIndex - middleIndex;
// Create temporary arrays
int L[leftSubarraySize], R[rightSubarraySize];
// Copying data to temporary arrays L[] and R[]
for (int i = 0; i L[i] = arr[leftIndex + i];
for (int j = 0; j R[j] = arr[middleIndex + 1 + j];
// Merge the temporary arrays back into arr[leftIndex..rightIndex]
// Initial index of Left subarray
int i = 0;
// Initial index of Right subarray
int j = 0;
// Initial index of merged subarray
int k = leftIndex;
while (i {
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
// If there're some remaining elements in L[]
// Copy to arr[]
while (i {
arr[k] = L[i];
i++;
k++;
}
// If there're some remaining elements in R[]
// Copy to arr[]
while (j {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int leftIndex, int rightIndex)
{
if(leftIndex >= rightIndex)
{
return;
}
int middleIndex = leftIndex + (rightIndex - leftIndex)/2;
mergeSort(arr, leftIndex, middleIndex);
mergeSort(arr, middleIndex+1, rightIndex);
merge(arr, leftIndex, middleIndex, rightIndex);
}

// Function to print the elements
// of the array
void printArray(int arr[], int size)
{
for (int i = 0; i {
cout << arr[i] << ' ';
}
cout << endl;
}
// Driver code
int main()
{
int arr[] = { 16, 12, 15, 13, 19, 17, 11, 18 };
int size = sizeof(arr) / sizeof(arr[0]);
cout << 'Unsorted array:' << endl;
printArray(arr, size);
mergeSort(arr, 0, size - 1);
cout << 'Sorted array:' << endl;
printArray(arr, size);
return 0;
}

Излаз:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

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

Испод је ЈаваСцрипт имплементација алгоритма сортирања спајањем:

// JavaScript implementation of the
// merge sort algorithm
// This function merges two subarrays of arr[]
// Left subarray: arr[leftIndex..middleIndex]
// Right subarray: arr[middleIndex+1..rightIndex]
function merge(arr, leftIndex, middleIndex, rightIndex) {
let leftSubarraySize = middleIndex - leftIndex + 1;
let rightSubarraySize = rightIndex - middleIndex;
// Create temporary arrays
var L = new Array(leftSubarraySize);
var R = new Array(rightSubarraySize);
// Copying data to temporary arrays L[] and R[]
for(let i = 0; i L[i] = arr[leftIndex + i];
}
for (let j = 0; j R[j] = arr[middleIndex + 1 + j];
}
// Merge the temporary arrays back into arr[leftIndex..rightIndex]
// Initial index of Left subarray
var i = 0;
// Initial index of Right subarray
var j = 0;
// Initial index of merged subarray
var k = leftIndex;
while (i {
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
// If there're some remaining elements in L[]
// Copy to arr[]
while (i {
arr[k] = L[i];
i++;
k++;
}
// If there're some remaining elements in R[]
// Copy to arr[]
while (j {
arr[k] = R[j];
j++;
k++;
}
}
function mergeSort(arr, leftIndex, rightIndex) {
if(leftIndex >= rightIndex) {
return
}
var middleIndex = leftIndex + parseInt((rightIndex - leftIndex)/2);
mergeSort(arr, leftIndex, middleIndex);
mergeSort(arr, middleIndex+1, rightIndex);
merge(arr, leftIndex, middleIndex, rightIndex);
}
// Function to print the elements
// of the array
function printArray(arr, size) {
for(let i = 0; i document.write(arr[i] + ' ');
}
document.write('
');
}
// Driver code:
var arr = [ 16, 12, 15, 13, 19, 17, 11, 18 ];
var size = arr.length;
document.write('Unsorted array:
');
printArray(arr, size);
mergeSort(arr, 0, size - 1);
document.write('Sorted array:
');
printArray(arr, size);

Излаз:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

Повезано: Динамичко програмирање: примери, уобичајени проблеми и решења

Питхон имплементација алгоритма за сортирање спајања

Испод је Питхон имплементација алгоритма сортирања спајањем:

# Python implementation of the
# merge sort algorithm
def mergeSort(arr):
if len(arr) > 1:
# Finding the middle index of the array
middleIndex = len(arr)//2
# Left half of the array
L = arr[:middleIndex]
# Right half of the array
R = arr[middleIndex:]
# Sorting the first half of the array
mergeSort(L)
# Sorting the second half of the array
mergeSort(R)
# Initial index of Left subarray
i = 0
# Initial index of Right subarray
j = 0
# Initial index of merged subarray
k = 0
# Copy data to temp arrays L[] and R[]
while i if L[i] arr[k] = L[i]
i = i + 1
else:
arr[k] = R[j]
j = j + 1
k = k + 1
# Checking if there're some remaining elements
while i arr[k] = L[i]
i = i + 1
k = k + 1
while j arr[k] = R[j]
j = j + 1
k = k + 1
# Function to print the elements
# of the array
def printArray(arr, size):
for i in range(size):
print(arr[i], end=' ')
print()

# Driver code
arr = [ 16, 12, 15, 13, 19, 17, 11, 18 ]
size = len(arr)
print('Unsorted array:')
printArray(arr, size)
mergeSort(arr)
print('Sorted array:')
printArray(arr, size)

Излаз:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

Схватите друге алгоритме сортирања

Сортирање је један од најчешће коришћених алгоритама у програмирању. Елементе можете сортирати у различитим програмским језицима помоћу различитих алгоритама за сортирање, попут брзог сортирања, сортирања по облачићима, спајања спајањем, сортирања уметања итд.

Сортирање мехурића је најбољи избор ако желите да научите о најједноставнијем алгоритму сортирања.

Објави Објави Твеет Емаил Увод у алгоритам сортирања мехурића

Алгоритам сортирања мехурића: одличан увод у сортирање низова.

Прочитајте следеће
Повезане теме
  • Програмирање
  • ЈаваСцрипт
  • Питхон
  • Кодирање Туториали
О аутору Иуврај Цхандра(Објављено 60 чланака)

Иуврај је студент основних студија рачунарства на Универзитету у Делхију у Индији. Он је страствен за Фулл Стацк Веб Девелопмент. Кад не пише, истражује дубину различитих технологија.

Још од Иуврај Цхандра

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили