From aa8edeafab60980f406b4735a767eeb193ee899e Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 19:27:31 +0100 Subject: [PATCH 01/13] Create slowsort.py added slowsort algorithm implementation to sorts --- sorts/slowsort.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 sorts/slowsort.py diff --git a/sorts/slowsort.py b/sorts/slowsort.py new file mode 100644 index 000000000000..888f862d23d7 --- /dev/null +++ b/sorts/slowsort.py @@ -0,0 +1,48 @@ +""" +Slowsort is a sorting algorithm. It is of humorous nature and not useful. +It's based on the principle of multiply and surrender, a tongue-in-cheek joke of divide and conquer. +It was published in 1986 by Andrei Broder and Jorge Stolfi in their paper Pessimal Algorithms and Simplexity Analysis +(a parody of optimal algorithms and complexity analysis). +""" + +from math import floor + +def slowsort(A : list, i : int = None, j : int = None) -> None: + """ + Sorts A[i..j] (both inclusive) in-place, i defaults to 0 if not given, j defaults to len(A) - 1 if not given. + It returns None. + >>> a = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(a); a + [1, 2, 3, 4, 4, 5, 5, 6] + >>> a = []; slowsort(a); a + [] + >>> a = [2]; slowsort(a); a + [2] + >>> a = [1, 2, 3, 4]; slowsort(a); a + [1, 2, 3, 4] + >>> a = [4, 3, 2, 1]; slowsort(a); a + [1, 2, 3, 4] + >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, 2, 7); a + [9, 8, 2, 3, 4, 5, 6, 7, 1, 0] + >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, j = 4); a + [5, 6, 7, 8, 9, 4, 3, 2, 1, 0] + >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, i = 5); a + [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] + """ + if i is None: + i = 0 + + if j is None: + j = len(A) - 1 + + if i >= j: + return + + m = floor((i + j) / 2) + + slowsort(A, i, m) + slowsort(A, m + 1, j) + + if A[j] < A[m]: + A[j], A[m] = A[m], A[j] + + slowsort(A, i, j - 1) From 49d85dd2eb10d416a4826c1757ff80b9f3a4e1be Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 19:29:58 +0100 Subject: [PATCH 02/13] Update slowsort.py --- sorts/slowsort.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 888f862d23d7..a38d0f5f7874 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -3,6 +3,8 @@ It's based on the principle of multiply and surrender, a tongue-in-cheek joke of divide and conquer. It was published in 1986 by Andrei Broder and Jorge Stolfi in their paper Pessimal Algorithms and Simplexity Analysis (a parody of optimal algorithms and complexity analysis). + +Source: https://en.wikipedia.org/wiki/Slowsort """ from math import floor From a4c2c7486eaa88ce463524632303601d7db84add Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 19:35:38 +0100 Subject: [PATCH 03/13] Update slowsort.py --- sorts/slowsort.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index a38d0f5f7874..7616399565fc 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -1,7 +1,8 @@ """ Slowsort is a sorting algorithm. It is of humorous nature and not useful. It's based on the principle of multiply and surrender, a tongue-in-cheek joke of divide and conquer. -It was published in 1986 by Andrei Broder and Jorge Stolfi in their paper Pessimal Algorithms and Simplexity Analysis +It was published in 1986 by Andrei Broder and Jorge Stolfi +in their paper Pessimal Algorithms and Simplexity Analysis (a parody of optimal algorithms and complexity analysis). Source: https://en.wikipedia.org/wiki/Slowsort @@ -11,7 +12,9 @@ def slowsort(A : list, i : int = None, j : int = None) -> None: """ - Sorts A[i..j] (both inclusive) in-place, i defaults to 0 if not given, j defaults to len(A) - 1 if not given. + Sorts A[i..j] (both inclusive) in-place. + i defaults to 0 if not given. + j defaults to len(A) - 1 if not given. It returns None. >>> a = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(a); a [1, 2, 3, 4, 4, 5, 5, 6] @@ -32,7 +35,7 @@ def slowsort(A : list, i : int = None, j : int = None) -> None: """ if i is None: i = 0 - + if j is None: j = len(A) - 1 From 483ef06962180cec1558676c4c84f1aa747d15ff Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 19:40:50 +0100 Subject: [PATCH 04/13] Update slowsort.py --- sorts/slowsort.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 7616399565fc..35e3bd6e11c7 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -1,6 +1,7 @@ """ Slowsort is a sorting algorithm. It is of humorous nature and not useful. -It's based on the principle of multiply and surrender, a tongue-in-cheek joke of divide and conquer. +It's based on the principle of multiply and surrender, +a tongue-in-cheek joke of divide and conquer. It was published in 1986 by Andrei Broder and Jorge Stolfi in their paper Pessimal Algorithms and Simplexity Analysis (a parody of optimal algorithms and complexity analysis). From 5d2fc3f7687b6747b76939a2f7561b4e0f0fe7f8 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 19:50:33 +0100 Subject: [PATCH 05/13] Update slowsort.py --- sorts/slowsort.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 35e3bd6e11c7..228e832d8d53 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -52,3 +52,7 @@ def slowsort(A : list, i : int = None, j : int = None) -> None: A[j], A[m] = A[m], A[j] slowsort(A, i, j - 1) + +if __name__ == '__main__': + from doctest import testmod + testmod() From 35e95a547e3bfc74af3a0f706e7f5752fcceba66 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 20:03:25 +0100 Subject: [PATCH 06/13] Update slowsort.py --- sorts/slowsort.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 228e832d8d53..5fdfd4521ab5 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -11,7 +11,8 @@ from math import floor -def slowsort(A : list, i : int = None, j : int = None) -> None: + +def slowsort(A: list, i: int = None, j: int = None) -> None: """ Sorts A[i..j] (both inclusive) in-place. i defaults to 0 if not given. @@ -36,23 +37,25 @@ def slowsort(A : list, i : int = None, j : int = None) -> None: """ if i is None: i = 0 - + if j is None: j = len(A) - 1 - + if i >= j: return - + m = floor((i + j) / 2) - + slowsort(A, i, m) slowsort(A, m + 1, j) - + if A[j] < A[m]: A[j], A[m] = A[m], A[j] - + slowsort(A, i, j - 1) -if __name__ == '__main__': + +if __name__ == "__main__": from doctest import testmod + testmod() From 18bf22cddbfc246e65933d3622c824ccee30356c Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 22:09:24 +0100 Subject: [PATCH 07/13] Update slowsort.py --- sorts/slowsort.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 5fdfd4521ab5..db2ace13020c 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -9,50 +9,51 @@ Source: https://en.wikipedia.org/wiki/Slowsort """ +from typing import Optional from math import floor -def slowsort(A: list, i: int = None, j: int = None) -> None: +def slowsort(sequence: list, i: Optional[int] = None, j: Optional[int] = None) -> None: """ - Sorts A[i..j] (both inclusive) in-place. + Sorts sequence[i..j] (both inclusive) in-place. i defaults to 0 if not given. - j defaults to len(A) - 1 if not given. + j defaults to len(sequence) - 1 if not given. It returns None. - >>> a = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(a); a + >>> sequence = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(sequence); sequence [1, 2, 3, 4, 4, 5, 5, 6] - >>> a = []; slowsort(a); a + >>> sequence = []; slowsort(sequence); sequence [] - >>> a = [2]; slowsort(a); a + >>> sequence = [2]; slowsort(sequence); sequence [2] - >>> a = [1, 2, 3, 4]; slowsort(a); a + >>> sequence = [1, 2, 3, 4]; slowsort(sequence); sequence [1, 2, 3, 4] - >>> a = [4, 3, 2, 1]; slowsort(a); a + >>> sequence = [4, 3, 2, 1]; slowsort(sequence); sequence [1, 2, 3, 4] - >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, 2, 7); a + >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, 2, 7); sequence [9, 8, 2, 3, 4, 5, 6, 7, 1, 0] - >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, j = 4); a + >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, j = 4); sequence [5, 6, 7, 8, 9, 4, 3, 2, 1, 0] - >>> a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(a, i = 5); a + >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, i = 5); sequence [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] """ if i is None: i = 0 if j is None: - j = len(A) - 1 + j = len(sequence) - 1 if i >= j: return m = floor((i + j) / 2) - slowsort(A, i, m) - slowsort(A, m + 1, j) + slowsort(sequence, i, m) + slowsort(sequence, m + 1, j) - if A[j] < A[m]: - A[j], A[m] = A[m], A[j] + if sequence[j] < sequence[m]: + sequence[j], sequence[m] = sequence[m], sequence[j] - slowsort(A, i, j - 1) + slowsort(sequence, i, j - 1) if __name__ == "__main__": From a1f6d6e48b1146c01b2289a5bbd4772882492620 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 5 Nov 2020 22:15:37 +0100 Subject: [PATCH 08/13] Update slowsort.py --- sorts/slowsort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index db2ace13020c..9494a011da07 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -9,8 +9,8 @@ Source: https://en.wikipedia.org/wiki/Slowsort """ -from typing import Optional from math import floor +from typing import Optional def slowsort(sequence: list, i: Optional[int] = None, j: Optional[int] = None) -> None: From 96f68a0d08634f8e7510dcfc57b031a521d0237e Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:36:10 +0100 Subject: [PATCH 09/13] Update slowsort.py --- sorts/slowsort.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 9494a011da07..e6f096f50bc1 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -9,7 +9,6 @@ Source: https://en.wikipedia.org/wiki/Slowsort """ -from math import floor from typing import Optional @@ -45,7 +44,7 @@ def slowsort(sequence: list, i: Optional[int] = None, j: Optional[int] = None) - if i >= j: return - m = floor((i + j) / 2) + m = (i + j) // 2 slowsort(sequence, i, m) slowsort(sequence, m + 1, j) From b7f169dfb4603acb07d2623f7281f65ff92ef7b4 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Fri, 11 Dec 2020 15:28:59 +0100 Subject: [PATCH 10/13] Update slowsort.py --- sorts/slowsort.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index e6f096f50bc1..bd43bb8b1a35 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -12,11 +12,11 @@ from typing import Optional -def slowsort(sequence: list, i: Optional[int] = None, j: Optional[int] = None) -> None: +def slowsort(sequence: list, start: Optional[int] = None, end: Optional[int] = None) -> None: """ - Sorts sequence[i..j] (both inclusive) in-place. - i defaults to 0 if not given. - j defaults to len(sequence) - 1 if not given. + Sorts sequence[start..end] (both inclusive) in-place. + start defaults to 0 if not given. + end defaults to len(sequence) - 1 if not given. It returns None. >>> sequence = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(sequence); sequence [1, 2, 3, 4, 4, 5, 5, 6] @@ -35,24 +35,24 @@ def slowsort(sequence: list, i: Optional[int] = None, j: Optional[int] = None) - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, i = 5); sequence [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] """ - if i is None: - i = 0 + if start is None: + start = 0 - if j is None: - j = len(sequence) - 1 + if end is None: + end = len(sequence) - 1 - if i >= j: + if start >= end: return - m = (i + j) // 2 + mid = (start + end) // 2 - slowsort(sequence, i, m) - slowsort(sequence, m + 1, j) + slowsort(sequence, start, mid) + slowsort(sequence, mid + 1, end) - if sequence[j] < sequence[m]: - sequence[j], sequence[m] = sequence[m], sequence[j] + if sequence[end] < sequence[mid]: + sequence[end], sequence[mid] = sequence[mid], sequence[end] - slowsort(sequence, i, j - 1) + slowsort(sequence, start, end - 1) if __name__ == "__main__": From b3bff16a4cba7e789f30ff3f4b7688999ee31b07 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Fri, 11 Dec 2020 15:34:07 +0100 Subject: [PATCH 11/13] Update slowsort.py --- sorts/slowsort.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index bd43bb8b1a35..d98dea0f3158 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -12,7 +12,9 @@ from typing import Optional -def slowsort(sequence: list, start: Optional[int] = None, end: Optional[int] = None) -> None: +def slowsort( + sequence: list, start: Optional[int] = None, end: Optional[int] = None +) -> None: """ Sorts sequence[start..end] (both inclusive) in-place. start defaults to 0 if not given. From 9687f272b610df96bca5cbf85b13e65b37c50b8b Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Fri, 11 Dec 2020 15:36:54 +0100 Subject: [PATCH 12/13] Update slowsort.py --- sorts/slowsort.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index d98dea0f3158..14f64a20e48a 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -32,9 +32,9 @@ def slowsort( [1, 2, 3, 4] >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, 2, 7); sequence [9, 8, 2, 3, 4, 5, 6, 7, 1, 0] - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, j = 4); sequence + >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, end = 4); sequence [5, 6, 7, 8, 9, 4, 3, 2, 1, 0] - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, i = 5); sequence + >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, start = 5); sequence [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] """ if start is None: From 3f307883d5cb9b7b4fc952ec00c966d57e3dffa0 Mon Sep 17 00:00:00 2001 From: Abdeldjaouad Nusayr Medakene <31663979+MrGeek1337@users.noreply.github.com> Date: Fri, 11 Dec 2020 15:41:22 +0100 Subject: [PATCH 13/13] Update slowsort.py --- sorts/slowsort.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sorts/slowsort.py b/sorts/slowsort.py index 14f64a20e48a..53bb14554ee2 100644 --- a/sorts/slowsort.py +++ b/sorts/slowsort.py @@ -20,21 +20,21 @@ def slowsort( start defaults to 0 if not given. end defaults to len(sequence) - 1 if not given. It returns None. - >>> sequence = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(sequence); sequence + >>> seq = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(seq); seq [1, 2, 3, 4, 4, 5, 5, 6] - >>> sequence = []; slowsort(sequence); sequence + >>> seq = []; slowsort(seq); seq [] - >>> sequence = [2]; slowsort(sequence); sequence + >>> seq = [2]; slowsort(seq); seq [2] - >>> sequence = [1, 2, 3, 4]; slowsort(sequence); sequence + >>> seq = [1, 2, 3, 4]; slowsort(seq); seq [1, 2, 3, 4] - >>> sequence = [4, 3, 2, 1]; slowsort(sequence); sequence + >>> seq = [4, 3, 2, 1]; slowsort(seq); seq [1, 2, 3, 4] - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, 2, 7); sequence + >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, 2, 7); seq [9, 8, 2, 3, 4, 5, 6, 7, 1, 0] - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, end = 4); sequence + >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, end = 4); seq [5, 6, 7, 8, 9, 4, 3, 2, 1, 0] - >>> sequence = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(sequence, start = 5); sequence + >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, start = 5); seq [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] """ if start is None: