Skip to content

Commit a089c3c

Browse files
Merge pull request #576 from Athting/task1
Added merge sort in python named as merge_sort_.py inside Python->Algorithm->Sorting
2 parents 09e0c01 + 1b97636 commit a089c3c

2 files changed

Lines changed: 92 additions & 35 deletions

File tree

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,64 @@
1-
# 📌 Merge Sort Algorithm
1+
# Merge Sort Algorithm
22
# Language: Python
33
# Category: Sorting
44
# Time Complexity: O(n log n)
55
# Space Complexity: O(n)
66

77
"""
88
Merge Sort is a classic Divide and Conquer algorithm.
9+
910
It works in three main steps:
10-
1. Divide: Split the array into two halves.
11-
2. Conquer: Recursively sort the two halves.
12-
3. Combine: Merge the two sorted halves into a single sorted array.
11+
1 Divide: Split the array into two halves.
12+
2 Conquer: Recursively sort both halves.
13+
3 Combine: Merge the sorted halves into a single sorted array.
14+
15+
Key Advantages:
16+
- Guaranteed O(n log n) performance.
17+
- Stable sorting algorithm.
18+
- Ideal for large datasets.
19+
20+
Drawback:
21+
- Requires extra space (O(n)) for merging.
1322
"""
1423

1524
def merge_sort(arr):
16-
"""
17-
Sorts the input list 'arr' using the Merge Sort algorithm.
18-
:param arr: list of elements (int/float) to be sorted
19-
:return: sorted list
20-
"""
21-
# Base condition: if array has 0 or 1 elements, it's already sorted
2225
if len(arr) <= 1:
2326
return arr
2427

25-
# Step 1: Divide the array into two halves
28+
# Step 1: Divide
2629
mid = len(arr) // 2
27-
left_half = merge_sort(arr[:mid])
28-
right_half = merge_sort(arr[mid:])
30+
left = arr[:mid]
31+
right = arr[mid:]
2932

30-
# Step 2: Merge the sorted halves
31-
return merge(left_half, right_half)
33+
# Step 2: Conquer (sort recursively)
34+
left_sorted = merge_sort(left)
35+
right_sorted = merge_sort(right)
36+
37+
# Step 3: Combine (merge results)
38+
return merge(left_sorted, right_sorted)
3239

3340

3441
def merge(left, right):
35-
"""
36-
Merges two sorted lists 'left' and 'right' into a single sorted list.
37-
:param left: sorted list
38-
:param right: sorted list
39-
:return: merged sorted list
40-
"""
41-
merged = []
42+
result = []
4243
i = j = 0
4344

44-
# Compare elements of both halves and add the smaller one
45+
# Compare and merge
4546
while i < len(left) and j < len(right):
4647
if left[i] <= right[j]:
47-
merged.append(left[i])
48+
result.append(left[i])
4849
i += 1
4950
else:
50-
merged.append(right[j])
51+
result.append(right[j])
5152
j += 1
5253

53-
# If there are remaining elements in left or right, add them
54-
merged.extend(left[i:])
55-
merged.extend(right[j:])
56-
57-
return merged
54+
# Add remaining elements
55+
result.extend(left[i:])
56+
result.extend(right[j:])
57+
return result
5858

5959

60-
# 🧪 Example usage
6160
if __name__ == "__main__":
62-
sample_array = [38, 27, 43, 3, 9, 82, 10]
63-
print("Original array:", sample_array)
64-
sorted_array = merge_sort(sample_array)
65-
print("Sorted array:", sorted_array)
61+
data = [38, 27, 43, 3, 9, 82, 10]
62+
print("Original Array:", data)
63+
sorted_data = merge_sort(data)
64+
print("Sorted Array:", sorted_data)
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Merge Sort Algorithm in Python
2+
# Description:
3+
# Merge Sort is a Divide and Conquer algorithm that recursively divides
4+
# the array into halves, sorts each half, and merges them back together.
5+
6+
def merge_sort(arr):
7+
"""
8+
Function to perform merge sort on a list.
9+
Args:
10+
arr (list): List of elements to be sorted.
11+
Returns:
12+
list: Sorted list.
13+
"""
14+
if len(arr) <= 1:
15+
return arr
16+
17+
# Step 1: Divide the array into two halves
18+
mid = len(arr) // 2
19+
left_half = arr[:mid]
20+
right_half = arr[mid:]
21+
22+
# Step 2: Recursively sort both halves
23+
left_sorted = merge_sort(left_half)
24+
right_sorted = merge_sort(right_half)
25+
26+
# Step 3: Merge the sorted halves
27+
return merge(left_sorted, right_sorted)
28+
29+
30+
def merge(left, right):
31+
"""
32+
Merge two sorted lists into a single sorted list.
33+
"""
34+
merged = []
35+
i = j = 0
36+
37+
# Compare elements and merge in sorted order
38+
while i < len(left) and j < len(right):
39+
if left[i] < right[j]:
40+
merged.append(left[i])
41+
i += 1
42+
else:
43+
merged.append(right[j])
44+
j += 1
45+
46+
# Add remaining elements (if any)
47+
merged.extend(left[i:])
48+
merged.extend(right[j:])
49+
50+
return merged
51+
52+
53+
# Example usage
54+
if __name__ == "__main__":
55+
arr = [38, 27, 43, 3, 9, 82, 10]
56+
print("Original Array:", arr)
57+
sorted_arr = merge_sort(arr)
58+
print("Sorted Array:", sorted_arr)

0 commit comments

Comments
 (0)