Skip to content

Commit aeff46e

Browse files
Merge pull request #577 from Athting/task2
Task2
2 parents a089c3c + 72051cc commit aeff46e

File tree

2 files changed

+35
-32
lines changed

2 files changed

+35
-32
lines changed
Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,67 @@
11
# Merge Sort Algorithm
22
# Language: Python
33
# Category: Sorting
4+
# Difficulty: Medium
45
# Time Complexity: O(n log n)
56
# Space Complexity: O(n)
67

78
"""
8-
Merge Sort is a classic Divide and Conquer algorithm.
9+
Merge Sort is a Divide and Conquer algorithm that recursively divides
10+
an array into halves, sorts each half, and merges the sorted halves into
11+
a single sorted array.
912
10-
It works in three main steps:
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.
13+
Steps:
14+
1. Divide: Split the array into two halves.
15+
2. Conquer: Recursively sort each half.
16+
3. Combine: Merge the sorted halves.
1417
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.
18+
Complexity Analysis:
19+
- Time Complexity: O(n log n)
20+
- Space Complexity: O(n)
2221
"""
2322

2423
def merge_sort(arr):
24+
"""Performs merge sort and returns a sorted list."""
2525
if len(arr) <= 1:
2626
return arr
2727

28-
# Step 1: Divide
2928
mid = len(arr) // 2
30-
left = arr[:mid]
31-
right = arr[mid:]
32-
33-
# Step 2: Conquer (sort recursively)
34-
left_sorted = merge_sort(left)
35-
right_sorted = merge_sort(right)
29+
left_sorted = merge_sort(arr[:mid])
30+
right_sorted = merge_sort(arr[mid:])
3631

37-
# Step 3: Combine (merge results)
3832
return merge(left_sorted, right_sorted)
3933

4034

4135
def merge(left, right):
42-
result = []
36+
"""Merges two sorted lists into one sorted list."""
37+
merged = []
4338
i = j = 0
4439

45-
# Compare and merge
4640
while i < len(left) and j < len(right):
4741
if left[i] <= right[j]:
48-
result.append(left[i])
42+
merged.append(left[i])
4943
i += 1
5044
else:
51-
result.append(right[j])
45+
merged.append(right[j])
5246
j += 1
5347

54-
# Add remaining elements
55-
result.extend(left[i:])
56-
result.extend(right[j:])
57-
return result
48+
merged.extend(left[i:])
49+
merged.extend(right[j:])
50+
return merged
5851

5952

53+
# Example Test Cases
6054
if __name__ == "__main__":
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)
55+
test_cases = [
56+
[38, 27, 43, 3, 9, 82, 10],
57+
[5, 2, 8, 1, 3],
58+
[],
59+
[1],
60+
[10, 10, 10],
61+
]
62+
63+
for i, arr in enumerate(test_cases, 1):
64+
print(f"Test Case {i}:")
65+
print("Original:", arr)
66+
print("Sorted: ", merge_sort(arr))
67+
print("-" * 30)
File renamed without changes.

0 commit comments

Comments
 (0)