diff --git a/11-rozdel-a-panuj/mergesort.py b/11-rozdel-a-panuj/mergesort.py new file mode 100644 index 0000000000000000000000000000000000000000..2ac2a352b1e7413a0b46481fd90045dd23fcff5d --- /dev/null +++ b/11-rozdel-a-panuj/mergesort.py @@ -0,0 +1,26 @@ +#!/usr/bin/python3 + +def merge(x, y): + i = j = 0 + out = [] + + while i < len(x) and j < len(y): + if x[i] < y[j]: + out.append(x[i]) + i += 1 + else: + out.append(y[j]) + j += 1 + + if i < len(x): + out.extend(x[i:]) + if j < len(y): + out.extend(y[j:]) + return out + +def mergesort(x): + if len(x) <= 1: + return x + + mid = len(x) // 2 + return merge(mergesort(x[:mid]), mergesort(x[mid:])) diff --git a/11-rozdel-a-panuj/quickselect.py b/11-rozdel-a-panuj/quickselect.py new file mode 100644 index 0000000000000000000000000000000000000000..0a6117297f417136d945866c0501d614128240b1 --- /dev/null +++ b/11-rozdel-a-panuj/quickselect.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 + +def quickselect(x, k): + + if len(x) <= 1: + return x[0] + + p = x[len(x) // 2] + vlevo = [ a for a in x if a < p ] + stred = [ a for a in x if a == p ] + vpravo = [ a for a in x if a > p ] + a = len(vlevo) + b = len(vlevo) + len(stred) + + if k < a: + return quickselect(vlevo, k) + elif k < b: + return p + else: + return quickselect(vpravo, k-b) diff --git a/11-rozdel-a-panuj/quicksort.py b/11-rozdel-a-panuj/quicksort.py new file mode 100644 index 0000000000000000000000000000000000000000..5197e59d3828e3f2d14343fd5aebcfb771445ba8 --- /dev/null +++ b/11-rozdel-a-panuj/quicksort.py @@ -0,0 +1,12 @@ +#!/usr/bin/python3 + +def quicksort(x): + + if len(x) <= 1: + return x + + p = x[len(x) // 2] + vlevo = [ a for a in x if a < p ] + stred = [ a for a in x if a == p ] + vpravo = [ a for a in x if a > p ] + return quicksort(vlevo) + stred + quicksort(vpravo)