-
-
Notifications
You must be signed in to change notification settings - Fork 46.7k
/
Copy pathtempCodeRunnerFile.python
42 lines (37 loc) · 1.5 KB
/
tempCodeRunnerFile.python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
A pure Python implementation of the Reverse Selection Sort algorithm.
This algorithm progressively sorts the array by finding the largest
element in each pass and placing it at the end of the sorted portion.
For doctests run the following command:
python3 -m doctest -v reverse_selection_sort.py
For manual testing run:
python3 reverse_selection_sort.py
"""
def reverse_selection_sort(collection: list) -> list:
"""
A pure implementation of reverse selection sort algorithm in Python
:param collection: some mutable ordered collection with heterogeneous
comparable items inside
:return: the same collection sorted in descending order
Examples:
>>> reverse_selection_sort([45,23,11,89,54,1,3,36])
[89, 54, 45, 36, 23, 11, 3, 1]
>>> reverse_selection_sort([0,-89,32,5,46,8,11])
[46, 32, 11, 8, 5, 0, -89]
>>> reverse_selection_sort([34,-2,-1,98,-42])
[98, 34, -1, -2, -42]
"""
n = len(collection)
for i in range(n):
# Find the maximum element in the unsorted portion
max_idx = i
for j in range(i + 1, n):
if collection[j] > collection[max_idx]:
max_idx = j
# Reverse the subarray from the current position to the end
collection[i:max_idx+1] = reversed(collection[i:max_idx+1])
return collection
if __name__ == "__main__":
user_input = input("Enter numbers separated by a comma:\n").strip()
unsorted = [int(item) for item in user_input.split(",")]
print(reverse_selection_sort(unsorted))