- Çeşidləmənin nə üçün lazım olduğunu izah etmək
- Qabarcıq, seçmə və daxiletmə üsullarını addım-addım yerinə yetirmək
- Alqoritmləri apardıqları müqayisələrin sayına görə müqayisə etmək
Telefonundakı kontaktlar əlifba sırası ilə, oyundakı reytinq cədvəli xallara görə, onlayn mağazada məhsullar isə qiymətə görə düzülür. Bütün bu hallarda kompüter çeşidləmə (nizamlama) aparır — elementləri müəyyən qaydaya görə sıraya düzür. Üstəlik, əvvəlki dərsdə gördük ki, sürətli ikili axtarış yalnız nizamlanmış siyahıda işləyir. Bəs kompüter siyahını necə nizamlayır?
Siyahının elementlərini müəyyən qaydaya görə — məsələn, artan və ya azalan sıra ilə, yaxud əlifba sırası ilə — yenidən düzmək.
Qabarcıq üsulu
Qabarcıq üsulunda qonşu elementlər cüt-cüt müqayisə olunur: soldakı sağdakından böyükdürsə, onların yeri dəyişdirilir. Siyahının bir dəfə başdan-başa yoxlanmasına keçid deyilir. Hər keçiddən sonra qalan elementlərin ən böyüyü suyun içindəki qabarcıq kimi «üzə çıxır» — siyahının sonuna gedir. Hansısa keçiddə heç bir yerdəyişmə olmasa, siyahı artıq nizamlanıb.
[5, 1, 4, 2] siyahısını qabarcıq üsulu ilə artan sıra ilə düz.
Həllini göstərHəllini gizlət
5 > 1 → yerdəyişmə: [1, 5, 4, 2]
5 > 4 → yerdəyişmə: [1, 4, 5, 2]
5 > 2 → yerdəyişmə: [1, 4, 2, 5] — 5 öz yerindədir.
2-ci keçid:
1 < 4 → dəyişmir
4 > 2 → yerdəyişmə: [1, 2, 4, 5] — 4 öz yerindədir.
3-cü keçid:
1 < 2 → dəyişmir. Yerdəyişmə olmadı — siyahı nizamlanıb: [1, 2, 4, 5].
Cəmi 3 + 2 + 1 = 6 müqayisə aparıldı.
def bubble_sort(a):
a = a[:]
n = len(a)
for i in range(n - 1):
swapped = False
for j in range(n - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
swapped = True
if not swapped:
break
return a
print(bubble_sort([5, 1, 4, 2]))
print(sorted(['Murad', 'Aysel', 'Leyla', 'Elvin']))▸ Gözlənilən nəticə
[1, 2, 4, 5] ['Aysel', 'Elvin', 'Leyla', 'Murad']
swapped dəyişəni keçiddə yerdəyişmə olub-olmadığını yadda saxlayır: olmayıbsa, alqoritm vaxtından əvvəl dayanır. Python-un hazır sorted() funksiyası sətirləri də əlifba sırası ilə düzür.Seçmə üsulu
Seçmə üsulunda siyahının nizamlanmamış hissəsində ən kiçik element tapılır və həmin hissənin birinci elementi ilə yeri dəyişdirilir. Beləliklə, soldakı nizamlanmış hissə hər addımda bir element böyüyür.
[29, 10, 14, 37, 13] siyahısını seçmə üsulu ilə artan sıra ilə düz.
Həllini göstərHəllini gizlət
2-ci addım: [29, 14, 37, 13] hissəsində ən kiçiyi 13-dür, onu 29 ilə dəyişirik → [10, 13, 14, 37, 29]
3-cü addım: [14, 37, 29] hissəsində ən kiçiyi 14-dür, o, artıq öz yerindədir.
4-cü addım: [37, 29] hissəsində ən kiçiyi 29-dur, onu 37 ilə dəyişirik → [10, 13, 14, 29, 37].
Daxiletmə üsulu
Daxiletmə üsulu kart oyunçusunun əlindəki kartları düzməsinə bənzəyir: o, növbəti kartı götürür və onu artıq düzülmüş kartlar arasında öz yerinə «daxil edir». Siyahı demək olar ki, nizamlanmış olanda bu üsul çox sürətli işləyir.
[4, 3, 5, 1] siyahısını daxiletmə üsulu ilə düz.
Həllini göstərHəllini gizlət
3-ü götürürük: 3 < 4, onu 4-dən əvvələ qoyuruq → [3, 4, 5, 1]
5-i götürürük: 5 > 4, yerində qalır → [3, 4, 5, 1]
1-i götürürük: 5, 4 və 3 bir yer sağa sürüşür, 1 başa keçir → [1, 3, 4, 5].
Hansı alqoritm daha sürətlidir?
Çeşidləmənin sürəti adətən müqayisələrin sayı ilə ölçülür. Üç sadə üsulun hər biri ən pis halda təxminən n(n − 1) / 2 müqayisə aparır: n = 10 üçün 45, n = 1000 üçün isə 499 500. Siyahı 10 dəfə uzananda iş təxminən 100 dəfə artır!
- Kən pis halda müqayisələrin sayı
- nsiyahıdakı elementlərin sayı
| Üsul | İdeya | Ən pis hal | Artıq nizamlanmış siyahı |
|---|---|---|---|
| Qabarcıq | qonşuları müqayisə edib yerlərini dəyişmək | n(n − 1) / 2 | n − 1 (erkən dayanma ilə) |
| Seçmə | ən kiçiyi tapıb əvvələ qoymaq | n(n − 1) / 2 | n(n − 1) / 2 |
| Daxiletmə | hər elementi nizamlanmış hissəyə daxil etmək | n(n − 1) / 2 | n − 1 |
Əsas fikirlər
- Çeşidləmə elementləri müəyyən qaydaya görə sıraya düzür; ikili axtarış üçün nizamlanmış siyahı lazımdır.
- Qabarcıq üsulu qonşuları müqayisə edir; hər keçiddən sonra ən böyük element sona gedir.
- Seçmə üsulu hər dəfə ən kiçik elementi tapıb nizamlanmamış hissənin əvvəlinə qoyur.
- Daxiletmə üsulu hər elementi nizamlanmış hissədə öz yerinə daxil edir.
- Sadə üsullar ən pis halda n(n − 1) / 2 müqayisə aparır; böyük siyahılar üçün daha sürətli alqoritmlər var.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.