From aaddcfed0e799443aeb60cb480d4a89a7379d647 Mon Sep 17 00:00:00 2001
From: vrundajasani <vrundajsani@gmail.com>
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 <vrundajsani@gmail.com>
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