Ĉi tio estas maŝine tradukita teksto kiu povas enhavi erarojn!
Quote
“Algoritmo”, vorto uzata de programistoj kiam ili ne volas klarigi kion ili faris.
Algoritme?
Kio estas algoritmo?
Algoritmo estas logika funkcio kiu plenumas donitan operacion. Do, vi povas teknike nomi funkcion kiu sumigas du nombrojn “algoritmon”, sed plej ofte algoritmo estas io iomete pli komplika ol tio. Ofte algoritmoj estas uzataj por fari operaciojn kiuj daŭras multe da tempo, pli rapide.
Ĉu mi devas uzi Python en ĉi tiuj taskoj?
Ne! Vi povas uzi ajnan programlingvon, kiun vi preferas en ĉi tiuj taskoj.
Enigaj bibliotekoj?
La ideo en ĉi tiuj taskoj estas eviti uzi enigajn bibliotekojn aŭ specialajn Python-funkciojn. Ekzemple, ekzistas simpla “unu-linio” por renversi tekston: text[::-1], sed ĉi tie ni volas, ke vi provu solvi tiajn taskojn sen uzi tion. Ĝi eble okazas, ke ni mencionu enigitan funkcion se la solvo estas iomete malfacila por trovi. Tio estos markita per ❗.
Praktike, estus plene eble solvi ĉiujn ĉi tiujn taskojn per if, for, while kaj ordinaraj listoperacioj.
Kiel “dezajni” algoritmon?
Plej ofte algoritmoj estas desegnitaj iteracie. Kion tio signifas?
1. ✅ Unue disĵetu la problemon en pli malgrandajn partojn.
- Unue pensu pri la plej grava afero, kiun vi bezonas por ke la algoritmo funkciu
- Ĉu ĝi devas redoni valoron? Ĉu
boolean-on? Ĉu liston? - Ĉu mi bezonas iujn helpajn funkciojn?
- Ĉu ĝi devas redoni valoron? Ĉu
2. ❓ Ĉu ekzistas iuj “ekstremaj kazoj”?
- Kio okazas se vi enmetas malplenan liston aŭ tekston?
3. ✅ Komencu per simple provi krei solvon
4. ✅ Kontrolu ĉu la algoritmo funkcias bone en la ekzekutotempo
- Provu pli grandan eniron, ĉu ĝi daŭras longan tempon?
5. ❓ Konsideru vian solvon, ĉu vi bezonas ĉiujn paŝojn, kiujn vi uzis?
- Ĉu ĉiuj
if-kontrolaj estas necesaj? - Se vi havas pli ol unu
for-ciklo, ĉu ekzistas klaraj manieroj fari tion al unufor-ciklo?- Tio estas malsama se vi havas nestigitajn ciklojn aŭ ciklojn post unu la alian. Post unu la alian ofte eblas eviti.
6. ✅ Konsideru ekstremajn scenarojn kun eniroj:
- Ekzemplo kun nombroj: grandaj nombroj, malgrandaj nombroj, negativaj nombroj
- Tekstekzemplo: multe da teksto, multaj malgrandaj vortoj, ekstra spacoj, grandaj kaj malgrandaj literoj.
7. ❓ Ĉu estas utile uzi pseŭdo-kodon por pli bone kompreni la logikon?
Tasko 1 - Trovi ĉu listo enhavas donitan numeron
Kreu algoritmon (funkcion) kiu trovas ĉu listo enhavas donitan numeron. Ĝi devas returni True aŭ False bazite ĉu la nombro ekzistas en la listo aŭ ne.
Jen listo kun testaj datumoj:
Test-data for algoritme:
| Test-Data | Sjekk | Svar |
|---|---|---|
[1, 2, 3, 4, 5, 6, 7, 8, 9] | 5 | True |
[1, 2, 3, 4, 5, 6, 7, 8, 9] | 10 | False |
[2, 3, 5, 7, 11, 13, 17, 19, 23] | 2 | True |
[2, 3, 5, 7, 11, 13, 17, 19, 23] | 10 | False |
[-1, 0, 1, -34, 321, 22, 98, -214] | -214 | True |
[-1, 0, 1, -34, 321, 22, 98, -214] | 0 | True |
[-1, 0, 1, -34, 321, 22, 98, -214] | 2 | False |
Tips til framgangsmåte
- Enigu liston kaj listan valoron en funkcion. En ĉi tiu tasko estos nombroj, sed povas esti teksto.
- Uzu
for-ciklon por trairi la liston - Se la nombro estas egala al la kontrola nombro, returnu
True - Se la
for-ciklo finiĝis kaj vi ne trovis ĝin, returnuFalse
Svaret (i python)
def exists_in_list(the_list, check):
for number in the_list:
if number == check:
return True
return False
Tasko 2 - Sumigado
Kreu algoritmon kiu sumigas liston de nombroj.
Test-data por algoritmo:
[1, 2, 3, 4, 5, 6], donas la respondon21.[5, 1, 23, 68, 22, 13, 4], donas la respondon136[3, 3, -3, -3, 3]donas la respondon3. Eble vi povas ignori negativajn nombrojn kaj doni la respondon9.
Tips til framgangsmåte
- Enigu liston en funkcion
- Konservu temporan sumon kiel
0. - Uzu
for-ciklon por trairi la liston. returnla sumon de la listo.
Svaret (i python)
def sum_list(numbers):
total = 0
for num in numbers:
total += num
return total
Tasko 3a - Maksimumo en Listo
Kreu algoritmon kiu trovas la plej grandan valoron en listo.
Test-data for algoritme:
[1, 2, 3, 4, 5, 6], donas la respondon6.[6, 17, 227, 1, 23, 42, 12], donas la respondon227[2, -2, 2, -2, -2, 2]donas la respondon2.
Tips til framgangsmåte
- Enigu liston en funkcion
- Metu provizoran valoron al la unua elemento de la listo.
- Uzu
for-ciklon por trairi la liston kaj komparu kun la valoro kiun vi metis en 2. - Se la valoro estas pli granda, metu la provizoran valoron al la nova valoro.
returnĉi tiun provizoran valoron.
Svaret (i python)
def find_max(numbers):
largest = numbers[0]
for num in numbers:
if num > largest:
largest = num
return largest
Tasko 3b - Se la listo estas malplena?
Aldonu kontrolon kiu testas ĉu la listo enhavas elementojn. Se ne, returnu None.
Svaret (i python)
def find_max(numbers):
if len(numbers) == 0:
return None
largest = numbers[0]
for num in numbers:
if num > largest:
largest = num
return largest
Tasko 4 - Nombri la nombron de donita elemento en listo
Kreu algoritmon kiu nombras la nombron de donita elemento en listo.
Test-data for algoritme:
["apple", "banana", "orange", "apple", "apple", "banana"]kunappledonas la respondon 3.[1, 4, 5, 2, 4, -3, -4, 4, 2, 4, 221, 3, 1, 1, 4, 1, 12, 33, 4, 4, 2, -4, 1, 4]kun4donas la respondon8.["cat", "dog", "cat", "mouse", "cat", "dog", "dog"]kundogdonas la respondon3.[7, 7, 2, 9, 7, 1, 0, 7, 3, 7, 9]kun7donas la respondon5.["red", "blue", "green", "red", "yellow", "red"]kunreddonas la respondon3.[10, -2, -2, -2, 5, 10, 10, -2]kun-2donas la respondon4.
Tips til framgangsmåte
- Enigu liston kaj kontrolvaloron en funkcion
- Komencu per tempora nombrvaloro fiksita je 0.
- Trairu la liston per
for-ciklo. - Se la elemento estas egala al la kontrolo, pligrandigu la nombrvaloron je 1.
- Redonu la nombrvaloron.
Svaret (i python)
def count(the_list, check):
count = 0
for element in the_list:
if element == check:
count += 1
return count
Tasko 5 - Inverti string-on, tekston
Kreu algoritmon kiu inversigas donitan string-on.
Test-data for algoritme:
Hello there!fariĝas!ereht olleH.heisann alle sammenfariĝasnemmas ella nnasiehPythonfariĝasnohtyPracecarfariĝasracecar12345abcfariĝascba54321god morgenfariĝasnegrom dog
Tips til framgangsmåte
- Enigu
string-on en funkcion - Kreu temporan valoron por konservi malplenan
string-on. - Trajru la tekstojn per
for-ciklo kunrange. Vi povas trairi la liston malantaŭen, sed eblas solvi tion per trairo antaŭen en la listo. - Aldonu ĉiun karakteron al la tempora valoro laŭvice.
- Redonu la temporan tekston.
Svaret (i python)
def reverse(text):
result = ""
# Ĉi tiu linio estas iomete komplika, sed ĝi komenciĝas
# ĉe la fino, iras (inkluzive) ĝis 0 (skribante
# -1 kiel finon), kaj kalkulas malsupren je 1 ĉiu fojo
for i in range(len(text) - 1, -1, -1):
result += text[i]
return result
Eble vi povas uzi algoritmon kiu aldonas al la komenco anstataŭe:
def reverse(text):
result = ""
for i in range(0, len(text)):
# aldonu al la komenco anstataŭe
result = text[i] + result
return result
Tasko 6 - Palindroma Algoritmo
Kreiu algoritmon kiu kontrolas ĉu donita vorto estas palindromo. Ekzemploj de palindromoj estas abba, racecar, regninger.
Tips til framgangsmåte
- Kreu funkcion kiu prenas tekston por kontroli
- Uzu
for-buŝon por kontroli ĉu la literoj ĉe ĉiu flanko de la teksto estas egalaj. - Redonu
Falsese litero ne kongruas, se ĉiuj kongruas (for-buŝo finiĝas), redonuTrue.
Ekstra:
Ĉu vi vidas kiel vi povas fari la algoritmon duobla rapideco?
Hint
Vi nur bezonas kontroli duonon!
Svaret (i python)
def palindrome(text):
for i in range(0, len(text)):
if text[i] != text[len(text) - i - 1]:
return False
return True
Raskere algoritme
def palindrome(text):
for i in range(0, int(len(text) / 2)):
if text[i] != text[len(text) - i - 1]:
return False
return True
Tasko 7 - Kontroli ĉu listo estas ordigita
Kreu algoritmon kiu kontrolas ĉu listo estas ordigita. La plej facila maniero kontroli tion estas komenci de la komenco kaj kompreni ĉu la sekva elemento estas “pli granda”. Se elemento ne estas “pli granda”, la listo ne estas ordigita.
Test-data for algoritme:
[1, 2, 3, 4, 5, 6], donas la respondonTrue.[6, 17, 227, 1, 23, 42, 12], donas la respondonFalse[2, -2, 2, -2, -2, 2]donas la respondonFalse.[2, 2, 3, 4, 4, 6], donas la respondonTrue.[12, 23, 34, 45, 56, 67], donas la respondonTrue.
Tips til framgangsmåte
- Kreu funkcion kiu prenas liston
- Uzu
for-ciklon por trairi la tutan liston (uzu range al la longo de la listo, minus 1len(list) - 1) - Komparu elementon \(n\) kun \(n + 1\), do la nuna elemento kun la sekva elemento.
- Se \(n\) estas pli malgranda ol \(n + 1\), iru al la sekva komparo.
- Se ĝi ne estas pli malgranda, sed pli granda, tiam la listo ne estas ordigita. Redonu
Falseĉi tie. - Se vi atingas la finon, tiam la listo estas ordigita, redonu
True.
Svaret (i Python)
def is_sorted(the_list):
for i in range(len(the_list) - 1):
if the_list[i] > the_list[i + 1]:
return False
return True
Tasko 8 - Miksado
Kreiu algoritmon kiu miksas liston de aĵoj. Ekzistas multaj manieroj fari tion, sed bona maniero estas tio, kio estas nomata Fisher-Yates miksada algoritmo. Vi povas legi pli pri tio ĉi tie Wikipedia.
Test Data
["a", "b", "c", "d", "e"]→ povas ekzemple fariĝi["c", "e", "a", "d", "b"][1, 2, 3, 4, 5, 6]→ povas ekzemple fariĝi[4, 1, 6, 3, 2, 5]["apple", "banana", "orange"]→ povas ekzemple fariĝi["orange", "apple", "banana"]["x"]→ restas ankoraŭ["x"][]→ restas ankoraŭ[]
Ĝi funkcias jene:
Algoritmen
- Kreu funkcion kiu prenas la liston de nombroj
- Kreu novan malplenan liston kiu devas teni la miksitan rezulton.
- Uzu
randompor elekti hazardan indekson en la listo. - Aldonu ĉi tiun elementon al la malplena listo kaj forigu ĝin de la malnova
- Redonu la novan liston de la funkcio
Svaret (i Python)
import random
def shuffle(the_list):
shuffled = []
while len(the_list) > 0:
i = random.randrange(0, len(the_list))
shuffled.append(the_list[i])
the_list.pop(i)
return shuffled
Tasko 9 - Bogo-sort
En ĉi tiu tasko vi devas krei (praktike) terura, sed ekstrema simple sorteran algoritmon. Ĝi estas ekstrema malbona kiam temas pri grandaj listoj (ĝi prenos eternumon kun pli ol 12-13 aĵoj). En Nivelo 2 ni kreos pli bonan sorteran algoritmon, bubble-sort.
Test Data
[3, 1, 2]→[1, 2, 3][5, 4, 3, 2, 1]→[1, 2, 3, 4, 5][10, 7, 8, 2]→[2, 7, 8, 10][1, 1, 1]→[1, 1, 1][9, 3, 6, 3, 9]→[3, 3, 6, 9, 9][0, -1, 4, -2]→[-2, -1, 0, 4]
La algoritmo funkcias jene:
Algoritmen
- Kreu funkcion kiu prenas la liston de netriitaj nombroj
- Miksu la liston hazarde (uzante mikson el tasko 8).
- Kontrolu ĉu la listo estas ordigita (uzante la kontrolon, kiun vi kreis en tasko 7).
- Se la listo ne estas ordigita, ripetu paŝojn 2 kaj 3.
- Ripetu ĝis la listo estas ordigita, poste returnu
Simple klarigite: bogo-sort miksas la tutan liston kaj esperas, ke ĝi estas ordigita.
Indico: Eble uzu shuffle el tasko 8 por krei netriceitan liston por via algoritmo.
Svaret (i Python)
def bogo_sort(the_list):
while not is_sorted(the_list):
the_list = shuffle(the_list)
return the_list
Tasko 10a - Serĉu tekston - “subŝtringo” (Malfacila!)
Kreu algoritmon kiu povas trovi serĉvorton en teksto. Do, se vi havas frazon kiel hello there vi volus redoni True kun la serĉvorto hello, False kun serĉvorto kiel hahah. Ĉi tiu algoritmo devas funkcii sendepende de la eniro kaj eliro.
Uzu la tekstdatenojn sube por kontroli ĉu via algoritmo funkcias.
Test-data for algoritme:
hello there everyonekunthere=Truehello there everyonekunever=Truehello there everyonekunthen=Falseqwecvyufavsjekkftyergwcerykunsjekk=True
Tips til framgangsmåte
- Kreu funkcion, kiu prenas du
string-ojn, datumojn kaj serĉvorton. - Uzu
for-ciklon kunrangepor trairi la tekston. - Estas grave pensi pri kie la ciklo devas fini.
- Kreu temporan variablon, kiu diras ĉu la serĉvorto estis trovita, kaj agordu ĝin al
Truekiel defaŭlto. - Uzu ankoraŭ unu
for-ciklon kunrangepor kompreni kie vi estas en la teksto kun la serĉvorto. - Se io en la serĉvorto ne kongruas kun kie vi kontrolas nun, agordu la temporan variablon al
Truekajbreakel la interna ciklo. - Se vi atingas la finon de la teksto sen trovi ion, redonu
False.
Svaret (i Python)
def search(data, word):
for i in range(0, len(data) - len(word) + 1):
found = True
for j in range (0, len(word)):
if data[i + j] != word[j]:
found = False
break
if found:
return True
return False
Tasko 10b
Aldonu ankaŭ plian kontrolon, kiu certigas, ke la serĉvorto ne estas pli longa ol la frazo.
Tips til framgangsmåte
- Aldonu ĉi tiun kontrolon antaŭ la
for-ciklo.
Svaret (i python)
def search(data, word):
if len(word) > len(data):
return False
for i in range(0, len(data) - len(word) + 1):
found = True
for j in range (0, len(word)):
if data[i + j] != word[j]:
found = False
break
if found:
return True
return False
Tasko 11 - Invertigo de vortoj en frazo (Malfacila)
Memoru reen al Tasko 5 pri la invertigo de frazo. Modifu (aŭ komencu denove) por krei algoritmon kiu inversigas ĉiun apartan vorton en frazo, kaj poste kunigas ilin denove.
Test-data for algoritme:
hello there everyonefariĝasolleh ereht enoyreveThis is the way it goes!fariĝassihT si eht yaw ti !seogdoes this racecar go? of course!fariĝasseod siht racecar ?og fo !esruoc
Tips til framgangsmåte
- Kreu funkcion kiu prenas kiel argumenton
string. - ❗Disigu la tekston uzante
.split(" "). - Kreu temporan variablon por konservi la finvaloron.
- Uzu
for-ciklon por trairi ĉiun vorton. - Uzu la saman metodon por inversigo kiel en Tasko 5
- Uzu la rezulton kaj aldonu ĝin al la variablo, kiun vi kreis en paŝo 2.
- Redonu la finvaloron
Svaret (i Python)
def reverse_words(words):
sentence = words.split(" ")
output = ""
for word in sentence:
reversed_word = ""
for i in range(0, len(word)):
reversed_word = word[i] + reversed_word
output += reversed_word + " "
return output
➕Ekstra:
Kio estas “kiel” en programado?
En programado, “kiel” (angle mock) estas objekto, kiu imitas la konduton de vera objekto. Ĝi estas uzata por testi kodon, sen dependi de la vera objekto. Tiel, oni povas testi specifan funkcion aŭ metodon, sen ke la vera objekto estu disponebla aŭ funkcia.
Ekzemple, se vi volas testi funkcion, kiu alvokas datbazon, vi povas uzi “kiel”-objekton, kiu imitas la datbazon. Tiel, vi povas testi la funkcion, sen ke vi fakte konektu al la vera datbazo.
Kiam uzi “kiel”-objektojn?
“Kiel”-objektojn oni uzas, kiam:
- Vi volas testi kodon, kiu dependas de eksteraj faktoroj, kiel datbazoj aŭ API-oj.
- Vi volas izoli la kodon, kiun vi testas, de la resto de la sistemo.
- Vi volas simuli erarajn situaciojn, por vidi, kiel la kodo reagadas.
- Vi volas plibonigi la rapidecon de la testoj.
Kiel krei “kiel”-objekton?
Ekzistas diversaj manieroj por krei “kiel”-objekton. Unu maniero estas uzi bibliotekon aŭ kadron, kiu subtenas “kiel”-objektojn. Alia maniero estas krei la “kiel”-objekton mem, per programado.
Ekzemple, en Python, oni povas uzi la bibliotekon unittest.mock por krei “kiel”-objektojn. En Java, oni povas uzi la bibliotekon Mockito.
Avantaĝoj de uzo de “kiel”-objektoj
- Pli rapida testado: “Kiel”-objektoj estas pli rapidaj ol la vera objekto, do testoj finiĝas pli rapide.
- Izolita testado: “Kiel”-objektoj izolas la testatan kodon, do testoj estas pli fidindaj.
- Simulado de eraroj: “Kiel”-objektoj permesas simuli erarajn situaciojn, do oni povas testi, kiel la kodo reagadas.
- Pli bona kodelego: Uzo de “kiel”-objektoj povas plibonigi la kodelegon, ĉar ĝi klarigas la dependecojn de la kodo.
Tasko E1 - Forigi duplikatojn el listo
Diru ke vi havas liston kiu enhavas nombrojn, aŭ tekston, sed ni volas forigi la duplikatojn. Kreu algoritmon kiu forigas ĉiujn duplikatojn el listo kaj enhavas nur la unuan de ĉiu unika elemento kiu ekzistas en la listo.
Tips til framgangsmåte
- Komencu per funkcio kiu prenas liston
- Ni uzos
while-ciklojn anstataŭfor. Tio faciligas en Python, en aliaj lingvojforkun nombrilaj variabloj funkcias bone. - Kreu nombrilan variablon
idx(por indexo, aŭi) - Uzu
while-ciklon kiu iru ĝis la longo de la listo - Ni volas kompreni la elementon je
idxkun ĉiuj aliaj elementoj - Kreu nombrilan variablon al
jdx(aŭj) kiu komenciĝas jeidx + 1 - Komparu elementon je
idxkun elemento jejdx, se ili estas egalaj, forigujdxuzantepop(jdx). - MEMORU! Se vi forigas la elementon, la listo fariĝas pli malgranda, do ni devas paŝi reen per
jdx -= 1. - Pliigu
jdxper 1 kaj testu la sekvan elementon - Post la interna
while-ciklo, pliiguidxper 1 kaj la eksterawhile-ciklo daŭros - Fine, redonu la liston kun forigitaj duplikatoj
Test Data
[1, 2, 2, 3, 1, 4, 3]→ iĝas[1, 2, 3, 4]["a", "b", "a", "c", "b", "d"]→ iĝas["a", "b", "c", "d"][5, 5, 5, 5]→ iĝas[5]["x", "y", "z", "x", "y", "x"]→ iĝas["x", "y", "z"][10, -1, 10, -1, 0, 0, 10]→ iĝas[10, -1, 0]["apple", "apple', "banana", "orange", "apple", "orange", "pear", "apple"]- Devus doni:
["apple", "banana", "orange", "pear"]
- Devus doni:
Svaret (i Python)
def delete_duplicates(the_list):
idx = 0
while idx < len(the_list):
jdx = idx + 1
while jdx < len(the_list):
if the_list[idx] == the_list[jdx]:
the_list.pop(jdx)
jdx -= 1
jdx += 1
idx += 1
return the_list
Task E2 - Counting Sort
Counting sort estas unu el la malmultaj sortaj algoritmoj kiuj funkcias en tio, kion ni nomas \(O(n)\) tempo. Tio estas, ĝi ne prenas multe pli da tempo ol la nombro da elementoj en la listo. Legu pli pri Big O-notacio en Nivelo 2.
Ĝi iomete dependas de kiom granda la intervalo de elementoj estas. Se la plej malgranda estas 0 kaj la plej granda estas 100000, ĝi povas preni iom da tempo, do ĉi tiu povas esti uzata se la intervalo de valoroj estas malgranda. Ĝi ankaŭ ne funkcias por negativaj nombroj, sed estas eble modifi la algoritmon por funkcii kun negativaj nombroj.
La algoritmo funkcias tiel:
- Trovu kiom granda la plej granda elemento estas, konservu la valoron de ĉi tiu elemento kiel \(k\).
- Kreu liston kiu enhavas \(k + 1\) elementojn,
count. - Trairu la netritan liston kaj uzu la valoron de la nombro kiel indekso. Tio estas, se la elemento havas la valoron 47, tiam vi iras al
count[47]kaj pligrandigas ĝin je 1. - Trairu la
countliston kaj metu la nombron da nombroj kiel la indekso estas. Ekzemple: Se estas 3 ĉe indekso 1, tiam vi aldonas tri 1-nombrojn.
Testdata
| Nesortitaj Datumoj | Sortitaj Datumoj |
|---|---|
[7, 3, 9, 1, 4, 3, 0, 6, 8, 6, 2, 1, 9, 0, 5, 4] | [0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9] |
[12, 13, 15, 0, 8, 15, 8, 5, 16, 8, 0, 20, 4, 9, 17, 16, 1, 3, 6, 15, 5, 2, 3, 1, 19, 13, 17, 5, 3, 10] | [0, 0, 1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8, 9, 10, 12, 13, 13, 15, 15, 15, 16, 16, 17, 17, 19, 20] |
Tips til framgangsmåte
- Komencu per krei funkcion kun listo kiel eniro
- Kriu malplenan liston
output - Uzu
for-ciklon por trairi la tutan liston - Zorgu pri la maksimuma valoro en variablo antaŭ la
for-ciklo - Aktualigu la maksimuman valoron se vi trovas ion pli grandan
- Kriu liston kiu enhavas tiun nombron da nuloj + 1. Ekzemple: la plej granda valoro estas 47, tiam vi kreas liston kun 48 nuloj. Vi povas fari tion per
[0] * (maks + 1), aŭfor-ciklo. Nomu ĝincount. - Trairu la liston denove per
for-ciklo - Uzu la valoron de la elemento kiel indekson kaj pligrandigu per 1.
count[value] += 1 - Uzu
for-ciklon por trairi la listoncount. - Uzu la valoron kiu estas ĉe ĉiu indekso por aldoni tiun nombron da nombroj
- Redonu la ordigitan liston
Svaret (i Python)
def counting_sort(input_list):
output = []
max_val = input_list[0]
for n in input_list:
if n > max_val:
max_val = n
# tio kreas amason da nuloj
count = [0] * (max_val + 1)
for n in input_list:
count[n] += 1
for i in range(len(count)):
# uzu _ por ignori valoron
for _ in range(count[i]):
output.append(i)
return output

