-
Notifications
You must be signed in to change notification settings - Fork 612
/
shell_sort.py
40 lines (31 loc) · 1.13 KB
/
shell_sort.py
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
'''
Time complexity of shell_sort is O(n2).
In the above implementation gap is reduce by half in every iteration.
here are many other ways to reduce gap which lead to better time complexity.
See this for more details.
'''
def shell_sort(arr):
# Start with a big gap, then reduce the gap
n = len(arr)
gap = int(n / 2)
# Do a gapped insertion sort for this gap size.
# The first gap elements a[0..gap-1] are already in gapped
# order keep adding one more element until the entire array
# is gap sorted
while gap > 0:
for i in range(gap, n):
# add a[i] to the elements that have been gap sorted
# save a[i] in temp and make a hole at position i
temp = arr[i]
# shift earlier gap-sorted elements up until the correct
# location for a[i] is found
j = i
while j >= gap and arr[j - gap] > temp:
arr[j] = arr[j - gap]
j -= gap
# put temp (the original a[i]) in its correct location
arr[j] = temp
gap = int(gap / 2)
arr = [ 12, 34, 54, 2, 3]
shell_sort(arr)
print(arr)