diff --git a/sorting-algorithms/merge_sort_recursive.py b/sorting-algorithms/merge_sort_recursive.py index 49eb0a4..b5e3263 100644 --- a/sorting-algorithms/merge_sort_recursive.py +++ b/sorting-algorithms/merge_sort_recursive.py @@ -2,61 +2,65 @@ # lst[low1]...lst[up1] and lst[low2]...lst[up2] merged to temp[low1]...temp[up2] def merge(lst, temp, low1, up1, low2, up2): - i = low1 - j = low2 - k = low1 - - while i<=up1 and j<=up2: - if lst[i] < lst[j]: - temp[k] = lst[i] - i += 1 - else: - temp[k] = lst[j] - j += 1 - k += 1 - - while i <= up1: - temp[k] = lst[i] - k += 1 - i += 1 - - while(j <= up2): - temp[k] = lst[j] - k += 1 - j += 1 + i = low1 + j = low2 + k = low1 + + while i <= up1 and j <= up2: + if lst[i] <= lst[j]: + temp[k] = lst[i] + i += 1 + else: + temp[k] = lst[j] + j += 1 + k += 1 + + while i <= up1: + temp[k] = lst[i] + k += 1 + i += 1 + + while j <= up2: + temp[k] = lst[j] + k += 1 + j += 1 + def copy(lst, temp, low, up): - i = low - while i<=up: - lst[i] = temp[i] - i += 1 + i = low + while i <= up: + lst[i] = temp[i] + i += 1 -def merge_sort1(lst, low, up): - temp = [None]*(len(lst)) - if low == up: # if only one element - return - - mid = (low+up)//2 - merge_sort1(lst,low,mid) # Sort lst[low]....lst[mid] - merge_sort1(lst,mid+1,up) # Sort lst[mid+1]....lst[up] +def merge_sort1(lst, temp, low, up): + if low >= up: # if only one element + return - # Merge lst[low]...lst[mid] and lst[mid+1]...lst[up] to temp[low]...temp[up] - merge(lst,temp,low,mid,mid+1,up) + mid = (low + up) // 2 + + merge_sort1(lst, temp, low, mid) # Sort lst[low]....lst[mid] + merge_sort1(lst, temp, mid + 1, up) # Sort lst[mid+1]....lst[up] + + # Merge lst[low]...lst[mid] and lst[mid+1]...lst[up] to temp[low]...temp[up] + merge(lst, temp, low, mid, mid + 1, up) + + # Copy temp[low]...temp[up] to lst[low]...lst[up] + copy(lst, temp, low, up) - # Copy temp[low]...temp[up] to lst[low]...lst[up] - copy(lst,temp,low,up) def merge_sort(lst, n): - merge_sort1(lst,0,n-1) + temp = [None] * n + merge_sort1(lst, temp, 0, n - 1) + if __name__ == '__main__': - data_list = [8, 5, 89, 30, 42, 92, 64, 4, 21, 56, 3] + data_list = [8, 5, 89, 30, 42, 92, 64, 4, 21, 56, 3] - print("Unsorted list is :") - print(data_list) + print("Unsorted list is :") + print(data_list) - merge_sort(data_list,len(data_list)) + merge_sort(data_list, len(data_list)) - print("Sorted list is :") - print(data_list) + print("Sorted list is :") + print(data_list)