Birlashtiruv saralash. Tezkor tartiblash (quicksort). Chiziqli saralash algoritmlari. Tartiblash. Mergesort effektiv tartiblash algoritmlaridan biri bo’lib uning ishlash prinsipi «bo’lib tashla va hukmronlik qil»


Download 354.93 Kb.
Pdf ko'rish
bet1/5
Sana01.04.2023
Hajmi354.93 Kb.
#1316420
  1   2   3   4   5
Bog'liq
8-ma\'ruza



 
Birlashtiruv saralash. Tezkor tartiblash (quicksort). Chiziqli saralash algoritmlari. 
 
Tartiblash. Mergesort 
Mergesort effektiv tartiblash algoritmlaridan biri bo’lib uning ishlash prinsipi 
«bo’lib tashla va 
hukmronlik qil» (divide and conquer)
 tamoyiliga asoslanadi. U tartiblash jarayonida ro’yhatni 
(array’ni) ikkiga bo’ladi, ikki tarafini yana ikkiga bo’ladi, ikki tarafini yana ikkiga bo’ladi, … ikki 
tarafda bitta son (yoki bir tarafda bitta son) qolguncha bo’lishda davom etadi. Keyin ularni 
tartiblashni boshlaydi. Bittalik yonma-yon turgan sonlar tartiblanib bo’lingach, ularni array 
sifatida birlashtiriladi. Birlashtirilgan, yonma-yon turgan ikkita elementli array’lar o’zaro 
tartiblanadi va birlashtiriladi. Keyin to’rtta elementli arraylar o’zaro tartiblanib birlashtiriladi. 
Shu tariqa bo’laklar bitta butun array’ga yig’ilguncha davom etadi. 
Mergesort’ning effektivligi – uning ishlash vaqtida, 
time complexity
 – O(n log n). 
Insertion 
sort
 va 
Selection sort
 bilan solishtirganda, ishlash vaqti ancha samarali. 
Ishlash prinsipi


Kod
Mergesort’ni tushunib olish biroz murakkabroq. 
Kodda izohlar yozib chiqdim, agar tushunarsiz joylari uchrasa Chrome’da Developer Tools’ni 
ochib, Console tab’da quyidagi kodni ishga tushirishingiz mumkin. Tushunarsiz 
joylariga 
console.log()
qo’yib tekshirasiz. 
function
mergeSort
(arr) { 
function
merge
(arr, aux, low, mid, high) { 
// mutatsiyaning oldini olib, arr array elementlaridan 
// aux array yasaymiz
aux 
=
[...arr] 
// i arrayning pastki qismi. mergeSort birinchi ishga tushganda
// low = 0, mid = 0, high = 1 bo'ladi.
let

=
low, j 
=
mid 
+
1
// Qismlarni solishtirib, arr array'ga tartiblangan elementlarni
// yig'amiz
for
(
let

=
low; k 
<=
high; k
++
) { 
if
(i 
>
mid) { 
arr[k] 
=
aux[j
++


else
if
(j 
>
high) { 
arr[k] 
=
aux[i
++


else
if
(aux[j] 
<
aux[i]) { 
arr[k] 
=
aux[j
++


else

arr[k] 
=
aux[i
++






function
sort
(arr, aux, low, high) { 
// arrayning (yoki array qismining) yuqori elementi pastki 
// elementidan kichkina bo'lsa yoki teng bo'lib qolsa rekursiv
// funksiyani to'xtatamiz
if
(high 
<=
low) { 
return


// arrayning (yoki array qismining) o'rtasini topamiz
const
mid 
=
low 
+
Math
.
trunc
((high 
-
low) 
/
2

// arrayning (yoki array qismining ikki tarafini tartiblaymiz)
sort
(arr, aux, low, mid) 
sort
(arr, aux, mid 
+
1
, high) 
// bu qismi high <= low bo'lgan holatda, funksiya to'xtaganda
// bitta oldingi chaqirilgan sort() ichida ishlaydi.
// Batafsil - rekursiyani o'rganing.
merge
(arr, aux, low, mid, high) 

let
aux 
=
[] 
sort
(arr, aux, 
0
, arr.
length
-
1

return
arr 

Quicksort 
yigirmanchi asrning eng muhim algoritmlaridan bo’lib, u ko’p 
dasturlarda ishlatiladi. Mergesort kabi, Quicksort ham rekursiv algoritm, lekin 
Quicksort’ning Mergesort’dan farqi – rekursiya ish tugallangach ishga tushadi 
(Mergesort’da avval rekursiya, keyin ish boshlanardi).

Download 354.93 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling