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