algorytm.org

Implementacja w Python



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 przez scalanie (mergesort) - Implementacja w Python
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
Nadesłany przez Rafał Gawlik, 29 listopada 2012 18:55
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

mergesort.py:
import math
import random

#merge sort - sortowanie przez scalanie
#Rafal Gawlik
#www.algorytm.org


#sortowanie - operacja scalania
def merge(L,start, center,finish):
	"""Operacja scalania"""
	i = start
	j = center + 1

	L2 = [] #lista pomocnicza

	#wybieraj odpowiednie elementy z dwoch tablic
	while (i <= center) and (j <= finish):
		if L[j] < L[i]:	
			L2.append(L[j])
			j = j + 1
		else:
			L2.append(L[i])
			i = i + 1
				
	#jedna z tablic skonczyla sie przepisz reszte z pozostalej
	if i <= center:
		while i <= center:
			L2.append(L[i])
			i = i + 1
	else:
		while j <= finish:
			L2.append(L[j])
			j = j + 1

	#przepisz wyniki z tablicy tymczasowej
	s = finish - start + 1
	i = 0
	while i < s:
		L[start + i] = L2[i]
		i = i + 1

	return L

#sortowanie przez scalanie
def merge_sort(L, start, finish):
	"""sortowanie merge sort"""
	if start != finish:
		
		#dzielimy dablice do konca
		center = int(math.floor((start + finish)/2))
		#na lewo
		merge_sort(L, start, center)
		#na prawo
		merge_sort(L,center+1,finish)
		
		#operacja scalania
		merge(L,start, center,finish)
	return L
        
#generuje dane wejsciowe w porzadku malejacym
def malejaco(n):
    L = []
    for i in range(0,n):
        L.append(n-i-1)
    return L

#generuje dane wejsciowe w porzadku losowym
def losowe(n):
    L = []
    a = range(0,n)
    for i in range(0,n):
        L.append(random.choice(a))
    return L

#przyklad uzycia
n = input('Podaj ilosc danych: ')
w = input('Dane wjsciowe: Losowo/Malejaco [1/2]: ')

if int(w) == 1:
	L = losowe(int(n))
	print(L)
elif int(w) == 2:
	L = malejaco(int(n))
	print(L)
else:
	print('napisales bzdure')

L = merge_sort(L,0,len(L)-1)

print('Po posortowaniu:')
print(L)
Dodaj komentarz