24
Merge sort algorithm
merge sort is an efficient algorithm, and one of Divide and Conquer algorithms that splits the giving array into two halves, and then merge them in a sorted manner.
best-case | average case | worst-case |
---|---|---|
O(n log n) | O(n log n) | O(n log n) |
The space complexity of merge sort is O(n)
- Fast for large arrays unlike selection, insertion, and bubble sort it doesn't go through the whole array many times.
- extra space to store subarrays
- slow for small arrays
- the algorithm does the whole process even the array is already sorted
def MergeSortAlgorithm(arr: list) -> list:
"""
[ name ] => merge sort
[ type ] => sorting algorithms
[ time complexity ] => O(n log n)
[ space complexity ] => O(n)
[ params ] => (
arr {list} list to sort
)
"""
n = len(arr)
if n > 1:
#getting the middle of the giving array
mid = n // 2
# left half
leftHalf = arr[:mid]
# right half
rightHalf = arr[mid:]
# sort left half
MergeSortAlgorithm(leftHalf)
# sort right half
MergeSortAlgorithm(rightHalf)
i = k = j = 0
while i < len(leftHalf) and j < len(rightHalf):
if leftHalf[i] > rightHalf[j]:
arr[k] = rightHalf[j]
j+=1
else:
arr[k] = leftHalf[i]
i+=1
k+=1
# inserting to the sortedArray the rest of the leftHalf
while i < len(leftHalf):
arr[k] = leftHalf[i]
k += 1
i+=1
# inserting to the sortedArray the rest of the rightHalf
while j < len(rightHalf):
arr[k] = rightHalf[j]
k+=1
j+=1
- https://getrevising.co.uk/grids/merge-sort-advantages-and-disadvantages
- https://www.tutorialspoint.com/data_structures_algorithms/merge_sort_algorithm.htm
- https://www.geeksforgeeks.org/merge-sort/
- https://www.interviewbit.com/tutorial/merge-sort-algorithm/#:~:text=Merge%20sort%20is%20one%20of,results%20into%20a%20sorted%20list.
Thank you so much for your time! :)
#day_11
24