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)