From aaddcfed0e799443aeb60cb480d4a89a7379d647 Mon Sep 17 00:00:00 2001 From: vrundajasani Date: Tue, 3 May 2022 16:46:54 -0400 Subject: [PATCH 1/3] Merge sort Algorithm in python --- projects/Merge_Sort_Algorithm/merge.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/Merge_Sort_Algorithm/merge.py diff --git a/projects/Merge_Sort_Algorithm/merge.py b/projects/Merge_Sort_Algorithm/merge.py new file mode 100644 index 000000000..5edfe9a4e --- /dev/null +++ b/projects/Merge_Sort_Algorithm/merge.py @@ -0,0 +1,31 @@ +def merge(listA, listB): + newlist = list() + a = 0 + b = 0 + while a < len(listA) and b < len(listB): + if listA[a] < listB[b]: + newlist.append(listA[a]) + a += 1 + else: + newlist.append(listB[b]) + b += 1 + while a < len(listA): + newlist.append(listA[a]) + a += 1 + while b < len(listB): + newlist.append(listB[b]) + b += 1 + return newlist + +def merge_sort(input_list): + if len(input_list) <= 1: + return input_list + else: + mid = len(input_list) // 2 + left = merge_sort(input_list[:mid]) + right = merge_sort(input_list[mid:]) + newlist = merge(left, right) + return newlist + +a = [56, 89, 45, 34, 90, 32, 20, 67, 43] +print(merge_sort(a)) \ No newline at end of file From 53c11be426fd1cc8018a1dff044ed28eb6a149e5 Mon Sep 17 00:00:00 2001 From: vrundajasani Date: Tue, 3 May 2022 16:57:12 -0400 Subject: [PATCH 2/3] Added comments to code --- projects/Merge_Sort_Algorithm/merge.py | 104 ++++++++++++++++++------- 1 file changed, 75 insertions(+), 29 deletions(-) diff --git a/projects/Merge_Sort_Algorithm/merge.py b/projects/Merge_Sort_Algorithm/merge.py index 5edfe9a4e..5a3319e7d 100644 --- a/projects/Merge_Sort_Algorithm/merge.py +++ b/projects/Merge_Sort_Algorithm/merge.py @@ -1,31 +1,77 @@ -def merge(listA, listB): - newlist = list() - a = 0 - b = 0 - while a < len(listA) and b < len(listB): - if listA[a] < listB[b]: - newlist.append(listA[a]) - a += 1 - else: - newlist.append(listB[b]) - b += 1 - while a < len(listA): - newlist.append(listA[a]) - a += 1 - while b < len(listB): - newlist.append(listB[b]) - b += 1 - return newlist +# Python program for implementation of MergeSort + +# Merges two subarrays of arr[]. +# First subarray is arr[l..m] +# Second subarray is arr[m+1..r] + + +def merge(arr, l, m, r): + n1 = m - l + 1 + n2 = r - m + + # create temp arrays + L = [0] * (n1) + R = [0] * (n2) + + # Copy data to temp arrays L[] and R[] + for i in range(0, n1): + L[i] = arr[l + i] + + for j in range(0, n2): + R[j] = arr[m + 1 + j] + + # Merge the temp arrays back into arr[l..r] + i = 0 # Initial index of first subarray + j = 0 # Initial index of second subarray + k = l # Initial index of merged subarray -def merge_sort(input_list): - if len(input_list) <= 1: - return input_list - else: - mid = len(input_list) // 2 - left = merge_sort(input_list[:mid]) - right = merge_sort(input_list[mid:]) - newlist = merge(left, right) - return newlist + while i < n1 and j < n2: + if L[i] <= R[j]: + arr[k] = L[i] + i += 1 + else: + arr[k] = R[j] + j += 1 + k += 1 + + # Copy the remaining elements of L[], if there + # are any + while i < n1: + arr[k] = L[i] + i += 1 + k += 1 + + # Copy the remaining elements of R[], if there + # are any + while j < n2: + arr[k] = R[j] + j += 1 + k += 1 + +# l is for left index and r is right index of the +# sub-array of arr to be sorted -a = [56, 89, 45, 34, 90, 32, 20, 67, 43] -print(merge_sort(a)) \ No newline at end of file +def mergeSort(arr, l, r): + if l < r: + + # Same as (l+r)//2, but avoids overflow for + # large l and h + m = l+(r-l)//2 + + # Sort first and second halves + mergeSort(arr, l, m) + mergeSort(arr, m+1, r) + merge(arr, l, m, r) + + +# Driver code to test above +arr = [100, 50, 80, 25, 20, 5] +n = len(arr) +print("Given array is") +for i in range(n): + print("%d" % arr[i],end=" ") + +mergeSort(arr, 0, n-1) +print("\n\nSorted array is") +for i in range(n): + print("%d" % arr[i],end=" ") \ No newline at end of file From df9124ab45b3fa01795c9e721d251d2c34eeb7a9 Mon Sep 17 00:00:00 2001 From: Vrunda Jasani <98854578+vrundajasani@users.noreply.github.com> Date: Wed, 4 May 2022 16:35:36 -0400 Subject: [PATCH 3/3] Create README.md --- projects/Merge_Sort_Algorithm/README.md | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/Merge_Sort_Algorithm/README.md diff --git a/projects/Merge_Sort_Algorithm/README.md b/projects/Merge_Sort_Algorithm/README.md new file mode 100644 index 000000000..be3b0dd8b --- /dev/null +++ b/projects/Merge_Sort_Algorithm/README.md @@ -0,0 +1,31 @@ +## Merge Sort Algorithm + +This script sorts the given array using merge sort algorithm. You can change the predefined "arr" to sort your array. + +### Prerequisites + +You only need python to run this script. You can visit [here](https://www.python.org/downloads/) to download python. + +### How to run the script + +Running the script is really simple! Just open a terminal in the folder where your script is located and run the following command : + +``` +python3 merge.py +``` + +### Sample use of the script + +``` +python3 merge.py + + Given array is + 100 50 80 20 70 + + Sorted array is + 20 50 70 80 100 + +``` +### Author Name + +Vrunda Jasani