algorytm.org

Implementacja w Python

Pomoc
Potrzebujesz algorytmu/kodu źródłowego, którego nie znalazłeś(aś) w serwisie?
Zamów algorytm!
Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sortowanie bąbelkowe (bubblesort) - Implementacja w Python
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
Nadesłany przez Kamil Socha, 15 listopada 2012 16:58
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

bubble_2_py.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import random
 
def losuj(rozmiar, od, do): # zwraca listę o podanym rozmiarze
    tab=[]                  # z wylosowanymi wartościami
    while rozmiar>0: #dopóki jakieś musi dodać
        tab.append(random.randint(od,do))
        rozmiar-=1 #zmniejsza ilość pozostałych komórek do wylosowania
    return tab
 
#wersja algorytmu z falga mowiaca czy ciag liczb jest juz posorotwany -
#jezeli podczas pelnego przebiegu petli nie wykonana zostaje ani jedna
#operacja zamiany miejscami to znaczy ze ciag jest juz posortowany
#i mozna zakonczyc sortowanie
def sort(tab): #zwraca posortowaną listę
    tab2=range(len(tab)) # Lista ze liczbami-indeksami
    tab2.pop() # Usuniącie ostatniej liczby-indeksu
    zm=0 # Zmienna zawirająca widomości czy zostały zmienione kolejności liczb 
    while True:
        zm=0 # Resetowanie zmiennej zm
        for i in tab2: 
            if tab[i] > tab[i+1]:
                tmp=[tab[i+1], tab[i]] # szybka lista zawierające potrzebne wartości
                tab[i]=tmp[0] # Nadawanie wartości w liście tab
                tab[i+1]=tmp[1]
                zm+=1
        if zm==0: # Jeśli jeden obieg pętli nie zmienił listy zwraca listę
            return tab
 
 
tab=losuj(10, 1,10)
print "przed: "+str(tab)
tab=sort(tab)
print "   po: "+str(tab)
Komentarze
photo
0 # Mariusz653456 2015-11-05 11:35
Nie byłoby przejrzyściej gdyby w funkcji losuj użyć pętli for zamiast while ?

def losuj(rozmiar, od, do):
tab = []
for a in range(rozmiar):
tab.append(random.randint(od, do))
return tab
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Mariusz653456 2015-11-05 12:08
Sam algorytm sortowania tez można zapisać krócej i przejrzyściej:

def sort2(tab): #zwraca posortowaną listę

while True:
zm=0 # Resetowanie zmiennej zm
for i in range(len(tab)-1):
if tab > tab[i+1]:
tmp=tab # szybka lista zawierające potrzebne wartości
tab=tab[i+1] # Nadawanie wartości w liście tab
tab[i+1]=tmp
zm+=1
if zm==0: # Jeśli jeden obieg pętli nie zmienił listy zwraca listę
return tab
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz