Bubble Sort (Köpük Sıralama) alqoritmi
-
Bubble Sort, ən sadə sıralama alqoritmlərindən biridir. Bu metod, verilmiş siyahıda ardıcıl elementləri müqayisə edərək və lazım olduqda yerlərini dəyişərək işləyir. Bu proses, siyahı tam sıralanana qədər təkrarlanır.
Bubble Sort Necə İşləyir?
Bu alqoritm adını, kiçik elementlərin yuxarı qalxması və böyük elementlərin aşağı düşməsi prinsipindən alır. Sadə və başa düşülməsi asan olsa da, böyük verilənlər üçün effektiv deyil.
Mürəkkəblik: O(n²), burada
n
sıralanacaq elementlərin sayıdır. Bu, böyük massivlər üçün çox yavaş və əlverişsizdir.
Bubble Sort Alqoritminin Addımları
- Bir funksiya yaradın və siyahını parametr kimi qəbul edin.
- Əsas dövrü (for loop) sondan əvvələ doğru işlədin.
- Daxili dövrü (for loop) əvvəldən
i-1
-ə qədər işlədin. - Əgər
arr[j]
>arr[j+1]
-dirsə, bu iki elementi dəyişdirin. - Sıralanmış massivi qaytarın.
- Təkmilləşdirmə:
noSwap
dəyişəni əlavə edin və heç bir dəyişiklik olmazsa, dövrü erkən dayandırın.
For Loop ilə Bubble Sort Həlli
const bubbleSorting = (arr) => { let noSwaps; for (let i = arr.length; i > 0; i--) { noSwaps = true; for (let j = 0; j < i - 1; j++) { if (arr[j] > arr[j + 1]) { const temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; noSwaps = false; } } if (noSwaps) break; // Dəyişiklik yoxdursa, dövrü bitiririk } return arr; }; console.log(bubbleSorting([11, 2, 1234, 88, 3, 66, 876]));
Üstünlüklər:
- Kiçik verilənlər üçün işləyir.
- Optimallaşdırma ilə erkən dayandırıla bilər (
noSwaps
).
Çatışmazlıqlar:
- Böyük massivlər üçün çox yavaşdır (O(n²)).
Rekursiya ilə Bubble Sort Həlli
Bu versiya təkrarlanan dövrlər (loops) əvəzinə rekursiv yanaşmadan istifadə edir.
function bubbleSort(arr, n = arr.length) { // Əsas şərt: yalnız 1 və ya 0 element varsa, artıq sıralanıb if (n <= 1) { return arr; } // Bir dəfə Bubble Sort tətbiq edirik for (let i = 0; i < n - 1; i++) { if (arr[i] > arr[i + 1]) { // İki elementi dəyişdiririk [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]; } } // Rekursiv olaraq funksiyanı çağırırıq return bubbleSort(arr, n - 1); } const arr = [64, 34, 25, 12, 22, 11, 90]; console.log(bubbleSort(arr));
Üstünlüklər:
- Loops (dövrlər) yerinə rekursiya istifadə edir.
Çatışmazlıqlar:
- Əlavə yaddaş tələb edə bilər (rekursiya dərinliyi çox olarsa).
TypeScript ilə Generic Bubble Sort Həlli
Bu versiya istənilən verilənlər tipini qəbul edə bilən (Generic) Bubble Sort metodudur.
function bubbleSort<T>(arr: T[]): T[] { const n = arr.length; for (let i = 0; i < n - 1; i++) { for (let j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr; }
Üstünlüklər:
- Həm rəqəmlərlə, həm də digər tipdəki verilənlərlə işləyə bilir.
- TypeScript-in təhlükəsizliyindən istifadə edir.
Nəticə
Metod Mürəkkəblik Üstünlüklər Çatışmazlıqlar For Loop Bubble Sort O(n²) Sadə və başa düşülən Böyük verilənlər üçün səmərəsiz Rekursiya ilə Bubble Sort O(n²) Dövr (loop) istifadə etmir Yaddaş istifadəsi arta bilər TypeScript Generic Bubble Sort O(n²) Müxtəlif verilənlər ilə işləyir O(n²) olduğu üçün yenə də yavaşdır Alternativlər: Quick Sort və Merge Sort daha effektiv sıralama metodlarıdır.
Bubble Sort yalnız kiçik massivlər üçün və tədris məqsədilə tövsiyə olunur!
-
C codex bu mövzunu -də sabitlədi
Bilik paylaşdıqca artan bir sərvətdir