Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 12ba921

Browse files
author
Amogh Singhal
authored
Update merge_sort.py
1 parent acb77c1 commit 12ba921

File tree

1 file changed

+31
-37
lines changed

1 file changed

+31
-37
lines changed

‎merge_sort.py‎

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,40 @@
1-
def merge_sort(array, left, right):
1+
2+
def merge_sort(array):
23
# derive the mid-point
3-
if left < right:
4-
mid = (left+(right-1))//2
5-
# print("mid", mid)
4+
if len(array) > 1:
5+
mid = len(array)//2
6+
7+
# create the temp sub-arrays
8+
LEFT = array[ :mid]
9+
RIGHT = array[mid: ]
610

711
# sort the first and second halves
8-
merge_sort(array, left, mid)
9-
merge_sort(array, mid+1, right)
10-
# merge back
11-
merge(array, left, mid, right)
12-
13-
def merge(array, left, mid, right):
14-
# initialize sizes for the sub-arrays
15-
size_left = mid - left + 1
16-
# print("size_left", size_left)
17-
size_right = right - mid
18-
# print("size_right", size_right)
19-
20-
# create the temp sub-arrays
21-
LEFT = [0] * (size_left)
22-
# print("LEFT", LEFT)
23-
RIGHT = [0] * (size_right)
24-
# print("RIGHT", RIGHT)
25-
26-
# copy data to the sub-arrays
27-
for i in range(0, size_left):
28-
LEFT[i] = array[left + i]
29-
30-
for j in range(0, size_right):
31-
RIGHT[j] = array[mid + 1 + j]
32-
33-
# merge into original array
34-
i, j, k = 0, 0, 1
35-
36-
while i < size_left and j < size_right:
37-
if LEFT[i] <= RIGHT[j]:
12+
merge_sort(LEFT)
13+
merge_sort(RIGHT)
14+
15+
# begin addig elements in sorted order
16+
i, j, k = 0, 0, 1
17+
18+
while i < len(LEFT) and j < len(RIGHT):
19+
if LEFT[i] < RIGHT[j]:
20+
array[k] = LEFT[i]
21+
i += 1
22+
else:
23+
array[k] = RIGHT[j]
24+
j += 1
25+
k += 1
26+
27+
# copy the remaining data
28+
while i < len(LEFT):
3829
array[k] = LEFT[i]
3930
i += 1
40-
else:
31+
k += 1
32+
33+
while j < len(RIGHT):
4134
array[k] = RIGHT[j]
4235
j += 1
43-
k += 1
36+
k += 1
4437

4538
arr = [6, 5, 3, 1, 8, 7, 2, 4]
46-
merge_sort(arr, 0, len(arr))
39+
merge_sort(arr)
40+
print(arr)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /