Skip to content

Commit 803d0f8

Browse files
authored
Update median_of_medians.py
Made Changes TheAlgorithms#2
1 parent 906bb2c commit 803d0f8

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

Diff for: searches/median_of_medians.py

+31-25
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
5
2020
"""
2121

22-
23-
def median_of_five(arr: list) -> int:
22+
def median_of_five(arr:list) -> int:
2423
"""
2524
>>> median_of_five([2, 4, 5, 7, 899])
2625
5
@@ -36,32 +35,39 @@ def median_of_five(arr: list) -> int:
3635
:param arr: Array to find median of
3736
:return: median of arr
3837
"""
39-
arr = sorted(arr)
40-
return arr[len(arr) // 2]
41-
38+
arr=sorted(arr)
39+
return arr[len(arr)//2]
4240

43-
def median_of_medians(arr: list) -> int:
41+
def median_of_medians(arr:list) -> int:
42+
"""
43+
>>> median_of_medians([2, 4, 5, 7, 899, 54, 32])
44+
54
45+
>>> median_of_medians([5, 7, 899, 54, 32])
46+
32
47+
>>> median_of_medians([5, 4, 3, 2])
48+
4
49+
>>> median_of_medians([3, 5, 7, 10, 2, 12])
50+
12
51+
"""
4452
"""
4553
Return a pivot to partition data on by calculating
4654
Median of medians of input data
47-
:param arr: The data to be sorted (a list)
48-
:param k: The rank to be searched
49-
:return: element at rank k
55+
:param arr: The data to be checked (a list)
56+
:return: median of medians of input array
5057
"""
5158
if len(arr) <= 5:
5259
return median_of_five(arr)
5360
medians = []
54-
i = 0
55-
while i < len(arr):
61+
i=0
62+
while i<len(arr):
5663
if (i + 4) <= len(arr):
5764
medians.append(median_of_five(arr[i:].copy()))
5865
else:
59-
medians.append(median_of_five(arr[i : i + 5].copy()))
60-
i += 5
66+
medians.append(median_of_five(arr[i:i+5].copy()))
67+
i+=5
6168
return median_of_medians(medians)
6269

63-
64-
def quick_select(arr: list, k: int) -> int:
70+
def quick_select(arr:list, target:int) -> int:
6571
"""
6672
>>> quick_select([2, 4, 5, 7, 899, 54, 32], 5)
6773
32
@@ -76,13 +82,13 @@ def quick_select(arr: list, k: int) -> int:
7682
"""
7783
Two way partition the data into smaller and greater lists,
7884
in relationship to the pivot
79-
:param arr: The data to be sorted (a list)
80-
:param k: The rank to be searched
81-
:return: element at rank k
85+
:param arr: The data to be searched (a list)
86+
:param target: The rank to be searched
87+
:return: element at rank target
8288
"""
8389

8490
# Invalid Input
85-
if k > len(arr):
91+
if target>len(arr):
8692
return -1
8793

8894
# x is the estimated pivot by median of medians algorithm
@@ -99,11 +105,11 @@ def quick_select(arr: list, k: int) -> int:
99105
check = True
100106
else:
101107
right.append(arr[i])
102-
rank_X = len(left) + 1
103-
if rank_X == k:
108+
rank_x = len(left) + 1
109+
if(rank_x==target):
104110
answer = x
105-
elif rank_X > k:
106-
answer = quick_select(left, k)
107-
elif rank_X < k:
108-
answer = quick_select(right, k - rank_X)
111+
elif rank_x>target:
112+
answer = quick_select(left,target)
113+
elif rank_x<target:
114+
answer = quick_select(right,target-rank_x)
109115
return answer

0 commit comments

Comments
 (0)