From a68c9a4627c3a9096572bd7a08314015f046dc5b Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Wed, 13 May 2020 11:20:06 +0200 Subject: [PATCH] =?UTF-8?q?Rozd=C4=9Bl=20a=20panuj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 11-rozdel-a-panuj/mergesort.py | 26 ++++++++++++++++++++++++++ 11-rozdel-a-panuj/quickselect.py | 20 ++++++++++++++++++++ 11-rozdel-a-panuj/quicksort.py | 12 ++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 11-rozdel-a-panuj/mergesort.py create mode 100644 11-rozdel-a-panuj/quickselect.py create mode 100644 11-rozdel-a-panuj/quicksort.py diff --git a/11-rozdel-a-panuj/mergesort.py b/11-rozdel-a-panuj/mergesort.py new file mode 100644 index 0000000..2ac2a35 --- /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 0000000..0a61172 --- /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 0000000..5197e59 --- /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) -- GitLab