Sorting Algorithms
Merge Sort
def merge(arr, start, mid, end):
left= start
right= mid+1
temp = []
while left<=mid and right<=end:
if arr[left]<=arr[right]:
temp.append(arr[left])
left+=1
else:
temp.append(arr[right])
right+=1
while left<=mid:
temp.append(arr[left])
left+=1
while right<=end:
temp.append(arr[right])
right+=1
for i in range(start,end+1):
arr[i]= temp[i-start]
def mergesort(arr, start, end):
if start>=end:
return
mid=(start + end)//2
mergesort(arr,start,mid)
mergesort(arr,mid+1,end)
merge(arr,start,mid,end)
arr = [2, 1, 3, 8, 4, 6]
mergesort(arr,0,5)
print(arr)
# Time Complexity = O(NlogN) , Space Complexity = O(N)
[1, 2, 3, 4, 6, 8]
Quick Sort
def getpartition(arr, start, end):
pivot = arr[start]
i = start + 1
j = end
while True:
while i <= j and arr[i] <= pivot:
i += 1
while i <= j and arr[j] > pivot:
j -= 1
if i <= j:
arr[i], arr[j] = arr[j], arr[i]
else:
break
arr[start], arr[j] = arr[j], arr[start]
return j
def quicksort(arr, start, end):
if start < end:
partition = getpartition(arr, start, end)
quicksort(arr, start, partition - 1)
quicksort(arr, partition + 1, end)
arr = [2, 1, 3, 8, 4, 6]
quicksort(arr, 0, len(arr) - 1)
print(arr)
# Time Complexity = O(NlogN) on average, O(N^2) in worst case , Space Complexity = O(logN) on average, O(N) in worst case
[1, 2, 3, 4, 6, 8]