if (arr.length < 2) return arr
let pivot = arr[0], left = [], right = []
for (i = 1; i < arr.length; i++) {
if (arr[i] <= pivot) {
left.push(arr[i])
}
else {
right.push(arr[i])
}
}
return quickSort(left).concat(pivot, quickSort(right))
}
|
Merge sort (Qo‘shib saralash)
6-rasm. Merge sort
Merge sort (Birlashtirib saralash) algoritmi asosiy beshta saralash algoritmlari (Bubble sort, Quick sort va boshqalar) dan biri boʻlib, chiziqli saralash algoritmlaridan farqli ravishda „boʻlib tashla va hukmronlik qil“ tipidagi algoritm hisoblanadi. Bu turdagi algoritmlar katta hajmdagi masalalarni nisbatan kichik boʻlgan va oson yechiladigan qismlarga ajratgan holda bajaradi. Bunday algoritmlar masalalarni yechishda vaqtdan yutish imkonini beradi.
Merge sort algoritmi:
Merge Sort funksiyasiga massiv va uning boshlangʻich (eng chapdagi element) va oxirgi nuqtalari (eng oʻngdagi element) beriladi.
Massivning oʻrtasi hisoblanadi: oʻrtasi = (chap + oʻng)/2. Bu narsa uni teng ikkiga boʻlish uchun kerak boʻladi.
Merge sortni rekursiv holda birinchi va ikkinchi qismlar uchun chaqiriladi.
2- va 3-qismlarda hosil boʻlgan massivlar birlashtirib chiqiladi.
Algoritm ishlash tezligi O(n*log(n)) boʻlib tezligi O(n2) boʻlgan oddiy Bubble sort, Insertion sort, Selection sortlardan ancha tez ishlaydi. Taqqoslash asosida ishlaydigan algortmlarning eng tez ishlash holati O(n*log(n)) boʻlishi isbotlangan.
Dasturi:
// Merge Sort ning C++ dasturlash tilida ifodalanishi
#include
using namespace std;
void merge(int array[], int const left, int const mid,
int const right)
{
auto const subArrayOne = mid - left + 1;
Do'stlaringiz bilan baham: |