mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-24 05:21:09 +00:00
Optimization for shell sort (#4038)
* fixed shell sort * udpate code style * Update sorts/shell_sort.py Co-authored-by: John Law <johnlaw.po@gmail.com> Co-authored-by: John Law <johnlaw.po@gmail.com>
This commit is contained in:
parent
ae8a5f8675
commit
53371b2381
|
@ -1,13 +1,5 @@
|
|||
"""
|
||||
This is a pure Python implementation of the shell sort algorithm
|
||||
|
||||
For doctests run following command:
|
||||
python -m doctest -v shell_sort.py
|
||||
or
|
||||
python3 -m doctest -v shell_sort.py
|
||||
|
||||
For manual testing run:
|
||||
python shell_sort.py
|
||||
https://en.wikipedia.org/wiki/Shellsort#Pseudocode
|
||||
"""
|
||||
|
||||
|
||||
|
@ -19,26 +11,29 @@ def shell_sort(collection):
|
|||
|
||||
>>> shell_sort([0, 5, 3, 2, 2])
|
||||
[0, 2, 2, 3, 5]
|
||||
|
||||
>>> shell_sort([])
|
||||
[]
|
||||
|
||||
>>> shell_sort([-2, -5, -45])
|
||||
[-45, -5, -2]
|
||||
"""
|
||||
# Marcin Ciura's gap sequence
|
||||
gaps = [701, 301, 132, 57, 23, 10, 4, 1]
|
||||
|
||||
gaps = [701, 301, 132, 57, 23, 10, 4, 1]
|
||||
for gap in gaps:
|
||||
for i in range(gap, len(collection)):
|
||||
insert_value = collection[i]
|
||||
j = i
|
||||
while j >= gap and collection[j] < collection[j - gap]:
|
||||
collection[j], collection[j - gap] = collection[j - gap], collection[j]
|
||||
while j >= gap and collection[j - gap] > insert_value:
|
||||
collection[j] = collection[j - gap]
|
||||
j -= gap
|
||||
collection[j] = insert_value
|
||||
return collection
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from doctest import testmod
|
||||
|
||||
testmod()
|
||||
user_input = input("Enter numbers separated by a comma:\n").strip()
|
||||
unsorted = [int(item) for item in user_input.split(",")]
|
||||
print(shell_sort(unsorted))
|
||||
|
|
Loading…
Reference in New Issue
Block a user