Page 70 - Программирование. Python. Для школьников. bizdin.kg
P. 70
70 PYTHON ПРОГРАММАЛОО ТИЛИ ТИЗМЕЛЕРДИ СОРТТОО
Өзүнүн ордуна биринчи (минималдык) элементти орноткон биринчи
өтүштү псевдокоддо мындай жазса болот:
i үчүн n-2ден 0гө чейин, кадам -1
if (a[j] > a[j+1])
ордун алмаштыр a[j] жана a[j+1]
Мында i өзгөрмөсү минималдык элемент жазылган уячанын индексин
сактайт. Алгач бул биринчи уяча болот. j өзгөрмөсү учурда каралып жаткан
уячаны билдирет.
Бир өтүштө мындай цикл бир элементти гана орунга коёт. Экинчи элемент-
ти «тартыш» үчүн, циклдин башындагы нин акыркы мааниси гана айырма-
луу болгон ушул сыяктуу эле дагы бир циклди жазуу керек. Эң чоң элемент
өзүнүн ордунда тургандыктан ага тийишпешибиз керек:
for i in range(n-1): #өтүүлөрдүн саны
for j in range(n-i-1): #акыркы элемент каралбайт
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
Ушундай циклдерден n-1 санда жасоо керек, б.а. тизмедеги элемент-
тердин санынан 1ге кем. Эмне үчүн n эмес? Анткени эгерде n-1 элемент
өздөрүнүн ордуна коюлса, анда калганы автоматтык түрдө өзүнүн ордуна
турат – башка орун жок.
Көбүкчө методу боюнча толук программаны жазалы:
from random import randint
n = 10
a = [randint (1,99) for n in range (n)]
print (a)
for i in range (n-1): #тизмеден өтүүлөрдүн саны
for j in range (n-i-1): #салыштыруулардын саны iге азаят
if a [j] > a [j+1]: #j жана j+1 элементтерин салыштырат
a[j], a [j+1] = a[j+1], a[j] #керек болсо эле-
менттердин ордун алмаштырат
print(a)
>>>
[5, 84, 90, 37, 30, 32, 29, 62, 17, 99]
[5, 17, 29, 30, 32, 37, 62, 84, 90, 99]
www.trk.kg