From 1b32a44335189063da39ef82ce9f2c8304c86cd2 Mon Sep 17 00:00:00 2001
From: codebasics <learnpythonlanguage@gmail.com>
Date: Thu, 1 Oct 2020 17:59:12 -0400
Subject: [PATCH 01/69] insertion sort

---
 algorithms/4_InsertionSort/insertion_sort.py | 27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/algorithms/4_InsertionSort/insertion_sort.py b/algorithms/4_InsertionSort/insertion_sort.py
index e69de29..b29200f 100644
--- a/algorithms/4_InsertionSort/insertion_sort.py
+++ b/algorithms/4_InsertionSort/insertion_sort.py
@@ -0,0 +1,27 @@
+
+def insertion_sort(elements):
+    for i in range(1, len(elements)):
+        anchor = elements[i]
+        j = i - 1
+        while j>=0 and anchor < elements[j]:
+            elements[j+1] = elements[j]
+            j = j - 1
+        elements[j+1] = anchor
+
+if __name__ == '__main__':
+    elements = [11,9,29,7,2,15,28]
+    insertion_sort(elements)
+    print(elements)
+    #
+    tests = [
+        [11,9,29,7,2,15,28],
+        [3, 7, 9, 11],
+        [25, 22, 21, 10],
+        [29, 15, 28],
+        [],
+        [6]
+    ]
+
+    for elements in tests:
+        insertion_sort(elements)
+        print(f'sorted array: {elements}')
\ No newline at end of file

From 91fbf1ebc73f6ea4245969bf917e0b28343e0eec Mon Sep 17 00:00:00 2001
From: dhavalsays <60363945+dhavalsays@users.noreply.github.com>
Date: Thu, 1 Oct 2020 18:00:24 -0400
Subject: [PATCH 02/69] Update insertion_sort_exercise.md

---
 algorithms/4_InsertionSort/insertion_sort_exercise.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/4_InsertionSort/insertion_sort_exercise.md b/algorithms/4_InsertionSort/insertion_sort_exercise.md
index 4f67d45..0e9a53c 100644
--- a/algorithms/4_InsertionSort/insertion_sort_exercise.md
+++ b/algorithms/4_InsertionSort/insertion_sort_exercise.md
@@ -2,7 +2,7 @@
 
 Compute the running median of a sequence of numbers. That is, given a stream of numbers, print out the median of the list so far on each new element.
 
-Recall that the median of an even-numbered list is the average of the two middle numbers.
+Recall that the median of an even-numbered list is the average of the two middle numbers in a *sorted list*.
 
 For example, given the sequence `[2, 1, 5, 7, 2, 0, 5]`, your algorithm should print out:
 

From e8bb32e3306ad83deec7d41d6dac87ec66e252ff Mon Sep 17 00:00:00 2001
From: dhavalsays <60363945+dhavalsays@users.noreply.github.com>
Date: Thu, 1 Oct 2020 18:00:54 -0400
Subject: [PATCH 03/69] Update insertion_sort_exercise.md

---
 algorithms/4_InsertionSort/insertion_sort_exercise.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/4_InsertionSort/insertion_sort_exercise.md b/algorithms/4_InsertionSort/insertion_sort_exercise.md
index 0e9a53c..3fa092c 100644
--- a/algorithms/4_InsertionSort/insertion_sort_exercise.md
+++ b/algorithms/4_InsertionSort/insertion_sort_exercise.md
@@ -17,4 +17,4 @@ For example, given the sequence `[2, 1, 5, 7, 2, 0, 5]`, your algorithm should p
 ```
 
 
- [Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/4_InsertionSort/insertion_sort_exercise_soluiton_lomuto.py)
+ [Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/4_InsertionSort/insertion_sort_exercise_solution.py)

From 494c70f1c0af752e713ed3ec2869e7f1f39e538d Mon Sep 17 00:00:00 2001
From: Karandeep Grover <groverkds@gmail.com>
Date: Sat, 10 Oct 2020 22:51:22 +0530
Subject: [PATCH 04/69] added - Merge Sort Exercises

---
 algorithms/5_MergeSort/merge_sort_exercise.md | 40 +++++++++++++++++
 .../merge_sort_exercise_solution.py           | 44 +++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 algorithms/5_MergeSort/merge_sort_exercise.md
 create mode 100644 algorithms/5_MergeSort/merge_sort_exercise_solution.py

diff --git a/algorithms/5_MergeSort/merge_sort_exercise.md b/algorithms/5_MergeSort/merge_sort_exercise.md
new file mode 100644
index 0000000..4c49616
--- /dev/null
+++ b/algorithms/5_MergeSort/merge_sort_exercise.md
@@ -0,0 +1,40 @@
+### Bubble Sort Exercise
+
+Modify [merge_sort function](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort.py) such that it can sort following list of athletes as per the time taken by them in the marathon,
+```
+elements = [
+        { 'name': 'vedanth',   'age': 17, 'time_hours': 1},
+        { 'name': 'rajab', 'age': 12,  'time_hours': 3},
+        { 'name': 'vignesh',  'age': 21,  'time_hours': 2.5},
+        { 'name': 'chinmay',  'age': 24,  'time_hours': 1.5},
+    ]
+``` 
+merge_sort function should take key from an athlete's marathon log and sort the list as per that key. For example,
+```
+merge_sort(elements, key='time_hours', descending=True)
+```
+This will sort elements by time_hours and your sorted list will look like,
+```
+elements = [
+        {'name': 'rajab', 'age': 12, 'time_hours': 3},
+        {'name': 'vignesh', 'age': 21, 'time_hours': 2.5},
+        {'name': 'chinmay', 'age': 24, 'time_hours': 1.5},
+        {'name': 'vedanth', 'age': 17, 'time_hours': 1},
+    ]
+``` 
+But if you call it like this,
+```
+merge_sort(elements, key='name')
+```
+output will be,
+```
+elements = [
+        { 'name': 'chinmay',   'age': 24, 'time_hours': 1.5},
+        { 'name': 'rajab', 'age': 12,  'time_hours': 3},
+        { 'name': 'vedanth',  'age': 17,  'time_hours': 1},
+        { 'name': 'vignesh',  'age': 21,  'time_hours': 2.5},
+    ]
+``` 
+
+[Solution](https://github.com/codebasics/py/blob/master/Algorithms/2_BubbleSort/merge_sort_exercise_solution.py)
+
diff --git a/algorithms/5_MergeSort/merge_sort_exercise_solution.py b/algorithms/5_MergeSort/merge_sort_exercise_solution.py
new file mode 100644
index 0000000..ec062f9
--- /dev/null
+++ b/algorithms/5_MergeSort/merge_sort_exercise_solution.py
@@ -0,0 +1,44 @@
+# you can use this to sort strings too
+def merge_sort(elements, key, descending=False):
+    size = len(elements)
+
+    if size == 1:
+        return elements
+
+    left_list = merge_sort(elements[0:size//2], key, descending)
+    right_list = merge_sort(elements[size//2:], key, descending)
+    sorted_list = merge(left_list, right_list, key, descending)
+
+    return sorted_list
+
+    
+def merge(left_list, right_list, key, descending=False):
+    merged = []
+    if descending:
+        while len(left_list) > 0 and len(right_list) > 0:
+            if left_list[0][key] >= right_list[0][key]:
+                merged.append(left_list.pop(0))
+            else:
+                merged.append(right_list.pop(0))
+
+    else:
+        while len(left_list) > 0 and len(right_list) > 0:
+            if left_list[0][key] <= right_list[0][key]:
+                merged.append(left_list.pop(0))
+            else:
+                merged.append(right_list.pop(0))
+
+    merged.extend(left_list)
+    merged.extend(right_list)
+    return merged
+
+if __name__ == '__main__':
+    elements = [
+        { 'name': 'vedanth',   'age': 17, 'time_hours': 1},
+        { 'name': 'rajab', 'age': 12,  'time_hours': 3},
+        { 'name': 'vignesh',  'age': 21,  'time_hours': 2.5},
+        { 'name': 'chinmay',  'age': 24,  'time_hours': 1.5},
+    ]
+
+    sorted_list = merge_sort(elements, key='time_hours', descending=True)
+    print(sorted_list)
\ No newline at end of file

From 6cd4c11c68664261db2478722aba3c9536068a0d Mon Sep 17 00:00:00 2001
From: dhavalsays <dhavalsays@gmail.com>
Date: Mon, 19 Oct 2020 18:53:40 -0400
Subject: [PATCH 05/69] merge sort

---
 algorithms/5_MergeSort/merge_sort_exercise.md |  6 +--
 algorithms/5_MergeSort/merge_sort_final.py    | 52 +++++++++++++++++++
 .../5_MergeSort/merge_sort_primitive.py       | 45 ++++++++++++++++
 3 files changed, 100 insertions(+), 3 deletions(-)
 create mode 100644 algorithms/5_MergeSort/merge_sort_final.py
 create mode 100644 algorithms/5_MergeSort/merge_sort_primitive.py

diff --git a/algorithms/5_MergeSort/merge_sort_exercise.md b/algorithms/5_MergeSort/merge_sort_exercise.md
index 4c49616..dfbf415 100644
--- a/algorithms/5_MergeSort/merge_sort_exercise.md
+++ b/algorithms/5_MergeSort/merge_sort_exercise.md
@@ -1,6 +1,6 @@
-### Bubble Sort Exercise
+### Merge Sort Exercise
 
-Modify [merge_sort function](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort.py) such that it can sort following list of athletes as per the time taken by them in the marathon,
+Modify [merge_sort function](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort_final.py) such that it can sort following list of athletes as per the time taken by them in the marathon,
 ```
 elements = [
         { 'name': 'vedanth',   'age': 17, 'time_hours': 1},
@@ -36,5 +36,5 @@ elements = [
     ]
 ``` 
 
-[Solution](https://github.com/codebasics/py/blob/master/Algorithms/2_BubbleSort/merge_sort_exercise_solution.py)
+[Solution](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort_exercise_solution.py)
 
diff --git a/algorithms/5_MergeSort/merge_sort_final.py b/algorithms/5_MergeSort/merge_sort_final.py
new file mode 100644
index 0000000..0501aa5
--- /dev/null
+++ b/algorithms/5_MergeSort/merge_sort_final.py
@@ -0,0 +1,52 @@
+
+def merge_sort(arr):
+    if len(arr) <= 1:
+        return
+
+    mid = len(arr)//2
+
+    left = arr[:mid]
+    right = arr[mid:]
+
+    merge_sort(left)
+    merge_sort(right)
+
+    merge_two_sorted_lists(left, right, arr)
+
+def merge_two_sorted_lists(a,b,arr):
+    len_a = len(a)
+    len_b = len(b)
+
+    i = j = k = 0
+
+    while i < len_a and j < len_b:
+        if a[i] <= b[j]:
+            arr[k] = a[i]
+            i+=1
+        else:
+            arr[k] = b[j]
+            j+=1
+        k+=1
+
+    while i < len_a:
+        arr[k] = a[i]
+        i+=1
+        k+=1
+
+    while j < len_b:
+        arr[k] = b[j]
+        j+=1
+        k+=1
+
+if __name__ == '__main__':
+    test_cases = [
+        [10, 3, 15, 7, 8, 23, 98, 29],
+        [],
+        [3],
+        [9,8,7,2],
+        [1,2,3,4,5]
+    ]
+
+    for arr in test_cases:
+        merge_sort(arr)
+        print(arr)
diff --git a/algorithms/5_MergeSort/merge_sort_primitive.py b/algorithms/5_MergeSort/merge_sort_primitive.py
new file mode 100644
index 0000000..96db67e
--- /dev/null
+++ b/algorithms/5_MergeSort/merge_sort_primitive.py
@@ -0,0 +1,45 @@
+
+def merge_sort(arr):
+    if len(arr) <= 1:
+        return arr
+
+    mid = len(arr)//2
+
+    left = arr[:mid]
+    right = arr[mid:]
+
+    left = merge_sort(left)
+    right = merge_sort(right)
+
+    return merge_two_sorted_lists(left, right)
+
+def merge_two_sorted_lists(a,b):
+    sorted_list = []
+
+    len_a = len(a)
+    len_b = len(b)
+
+    i = j = 0
+
+    while i < len_a and j < len_b:
+        if a[i] <= b[j]:
+            sorted_list.append(a[i])
+            i+=1
+        else:
+            sorted_list.append(b[j])
+            j+=1
+
+    while i < len_a:
+        sorted_list.append(a[i])
+        i+=1
+
+    while j < len_b:
+        sorted_list.append(b[j])
+        j+=1
+
+    return sorted_list
+
+if __name__ == '__main__':
+    arr = [10,3,15,7,8,23,98,29]
+
+    print(merge_sort(arr))

From 845af5f02be5e28f7045a81041b24d867673f971 Mon Sep 17 00:00:00 2001
From: dhavalsays <dhavalsays@gmail.com>
Date: Mon, 19 Oct 2020 18:58:22 -0400
Subject: [PATCH 06/69] merge sort

---
 algorithms/5_MergeSort/merge_sort_exercise.md | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/algorithms/5_MergeSort/merge_sort_exercise.md b/algorithms/5_MergeSort/merge_sort_exercise.md
index dfbf415..8fc687a 100644
--- a/algorithms/5_MergeSort/merge_sort_exercise.md
+++ b/algorithms/5_MergeSort/merge_sort_exercise.md
@@ -1,6 +1,6 @@
 ### Merge Sort Exercise
 
-Modify [merge_sort function](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort_final.py) such that it can sort following list of athletes as per the time taken by them in the marathon,
+Modify [merge_sort function](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/5_MergeSort/merge_sort_final.py) such that it can sort following list of athletes as per the time taken by them in the marathon,
 ```
 elements = [
         { 'name': 'vedanth',   'age': 17, 'time_hours': 1},
@@ -36,5 +36,4 @@ elements = [
     ]
 ``` 
 
-[Solution](https://github.com/codebasics/py/blob/master/Algorithms/5_MergeSort/merge_sort_exercise_solution.py)
-
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/5_MergeSort/merge_sort_exercise_solution.py)

From c979dab96ab2187a60b90009120e5498498db2a3 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Thu, 22 Oct 2020 15:57:12 +0530
Subject: [PATCH 07/69] Shell Sort Exercise

---
 algorithms/6_ShellSort/desktop.ini            | Bin 0 -> 246 bytes
 algorithms/6_ShellSort/shell_sort.py          |  29 ++++++++++++++++
 algorithms/6_ShellSort/shell_sort_exercise.md |  18 ++++++++++
 .../shell_sort_exercise_solution.py           |  32 ++++++++++++++++++
 4 files changed, 79 insertions(+)
 create mode 100644 algorithms/6_ShellSort/desktop.ini
 create mode 100644 algorithms/6_ShellSort/shell_sort.py
 create mode 100644 algorithms/6_ShellSort/shell_sort_exercise.md
 create mode 100644 algorithms/6_ShellSort/shell_sort_exercise_solution.py

diff --git a/algorithms/6_ShellSort/desktop.ini b/algorithms/6_ShellSort/desktop.ini
new file mode 100644
index 0000000000000000000000000000000000000000..d375fae1cf888d20b0b85050f528777517aafa4d
GIT binary patch
literal 246
zcmY+8!3u(45QM*T&^!15Ar_qiPleH`sAF~zu@WjHD|-As|3ebXEVH{a!|sXMai-#8
z%|$_Lt+;Wd;lPlA`zFja53Xd?>MGXUNlAiYMHw_(_pR)uvXrNKXXI?08&3AZgy@&i
wdRuzwZe3>1LQTzE-m4;ie7diKJ7>zozY{UGI`*H^XJk5KeIGH>H4fi?0mSkth5!Hn

literal 0
HcmV?d00001

diff --git a/algorithms/6_ShellSort/shell_sort.py b/algorithms/6_ShellSort/shell_sort.py
new file mode 100644
index 0000000..393a9af
--- /dev/null
+++ b/algorithms/6_ShellSort/shell_sort.py
@@ -0,0 +1,29 @@
+def shell_sort(arr):
+    n = len(arr)
+    gap = n//2
+    while gap > 0:
+        for i in range(gap, n):
+            temp = arr[i]
+            j = i
+            while j >= gap and arr[j-gap] > temp:
+                arr[j] = arr[j-gap]
+                j -= gap
+            arr[j] = temp
+        gap //= 2
+
+
+if __name__ == '__main__':
+    #
+    tests = [
+        [11, 9, 29, 7, 2, 15, 28],
+        [3, 7, 9, 11],
+        [25, 22, 21, 10, 33, 22],
+        [29, 15, 28],
+        [6],
+        [2, 1, 5, 7, 2, 0, 5]
+    ]
+    
+    for elements in tests:
+        print(f'Given unsorted array: {elements}')
+        shell_sort(elements)
+        print(f'Array after Sorting : {elements}')
diff --git a/algorithms/6_ShellSort/shell_sort_exercise.md b/algorithms/6_ShellSort/shell_sort_exercise.md
new file mode 100644
index 0000000..657c41a
--- /dev/null
+++ b/algorithms/6_ShellSort/shell_sort_exercise.md
@@ -0,0 +1,18 @@
+# Exercise: Shell Sort
+
+Sort the elements of a given list using shell sort, but with a slight modification. Remove all the repeating occurances of elements while sorting. 
+
+Traditionally, when comparing two elements in shell sort, we swap if first element is bigger than second, and do nothing otherwise.
+
+ In this modified shell sort with duplicate removal, we will swap if first element is bigger than second, and do nothing if element is smaller, but if values are same, we will delete one of the two elements we are comparing before starting the next pass for the reduced gap.
+
+
+
+For example, given the unsorted list `[2, 1, 5, 7, 2, 0, 5, 1, 2, 9, 5, 8, 3]`, after sorting using shell sort without duplicates, the sorted list would be:
+
+```
+[0, 1, 2, 3, 5, 7, 8, 9]
+```
+
+
+ [Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/6_ShellSort/shell_sort_exercise_solution.py)
\ No newline at end of file
diff --git a/algorithms/6_ShellSort/shell_sort_exercise_solution.py b/algorithms/6_ShellSort/shell_sort_exercise_solution.py
new file mode 100644
index 0000000..0ca51b6
--- /dev/null
+++ b/algorithms/6_ShellSort/shell_sort_exercise_solution.py
@@ -0,0 +1,32 @@
+def shell_sort(arr):
+    n = len(arr)
+    div = 2
+    gap = n//div
+    while gap > 0:
+        IndexToDelete = []
+        for i in range(gap, n):
+            temp = arr[i]
+            j = i
+            while j >= gap and arr[j-gap] >= temp:
+                if arr[j-gap] == temp:
+                    IndexToDelete.append(j)
+                arr[j] = arr[j-gap]
+                j -= gap
+            arr[j] = temp
+        IndexToDelete=list(set(IndexToDelete))
+        IndexToDelete.sort()
+        if IndexToDelete:
+            for i in IndexToDelete[-1::-1]:
+                del arr[i]
+        div *= 2
+        n = len(arr)
+        gap = n//div
+
+
+if __name__ == '__main__':
+    elements = [2, 1, 5, 7, 2, 0, 5, 1, 2, 9,  5, 8, 3]
+
+    print(f'Given unsorted list: {elements}')
+    shell_sort(elements)
+    print(f'List after Sorting : {elements}')
+

From 86d7af2c4fe6f9d71b7d0854786aa9a38d86c0a0 Mon Sep 17 00:00:00 2001
From: codebasics <learnpythonlanguage@gmail.com>
Date: Sat, 24 Oct 2020 13:14:17 -0400
Subject: [PATCH 08/69] fix error in doubly linked list

---
 .../Solution/doubly_linked_list_exercise.py            | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/data_structures/3_LinkedList/Solution/doubly_linked_list_exercise.py b/data_structures/3_LinkedList/Solution/doubly_linked_list_exercise.py
index 0c560b4..35b9c38 100644
--- a/data_structures/3_LinkedList/Solution/doubly_linked_list_exercise.py
+++ b/data_structures/3_LinkedList/Solution/doubly_linked_list_exercise.py
@@ -50,9 +50,13 @@ def get_length(self):
         return count
 
     def insert_at_begining(self, data):
-        node = Node(data, self.head, None)
-        self.head.prev = node
-        self.head = node
+        if self.head == None:
+            node = Node(data, self.head, None)
+            self.head = node
+        else:
+            node = Node(data, self.head, None)
+            self.head.prev = node
+            self.head = node
 
     def insert_at_end(self, data):
         if self.head is None:

From 7c6144ed4b9fd6b86ac97628de1075eb379eb873 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Sun, 25 Oct 2020 16:11:16 +0530
Subject: [PATCH 09/69] Removed extra files

---
 algorithms/6_ShellSort/desktop.ini   | Bin 246 -> 0 bytes
 algorithms/6_ShellSort/shell_sort.py |  29 ---------------------------
 2 files changed, 29 deletions(-)
 delete mode 100644 algorithms/6_ShellSort/desktop.ini
 delete mode 100644 algorithms/6_ShellSort/shell_sort.py

diff --git a/algorithms/6_ShellSort/desktop.ini b/algorithms/6_ShellSort/desktop.ini
deleted file mode 100644
index d375fae1cf888d20b0b85050f528777517aafa4d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 246
zcmY+8!3u(45QM*T&^!15Ar_qiPleH`sAF~zu@WjHD|-As|3ebXEVH{a!|sXMai-#8
z%|$_Lt+;Wd;lPlA`zFja53Xd?>MGXUNlAiYMHw_(_pR)uvXrNKXXI?08&3AZgy@&i
wdRuzwZe3>1LQTzE-m4;ie7diKJ7>zozY{UGI`*H^XJk5KeIGH>H4fi?0mSkth5!Hn

diff --git a/algorithms/6_ShellSort/shell_sort.py b/algorithms/6_ShellSort/shell_sort.py
deleted file mode 100644
index 393a9af..0000000
--- a/algorithms/6_ShellSort/shell_sort.py
+++ /dev/null
@@ -1,29 +0,0 @@
-def shell_sort(arr):
-    n = len(arr)
-    gap = n//2
-    while gap > 0:
-        for i in range(gap, n):
-            temp = arr[i]
-            j = i
-            while j >= gap and arr[j-gap] > temp:
-                arr[j] = arr[j-gap]
-                j -= gap
-            arr[j] = temp
-        gap //= 2
-
-
-if __name__ == '__main__':
-    #
-    tests = [
-        [11, 9, 29, 7, 2, 15, 28],
-        [3, 7, 9, 11],
-        [25, 22, 21, 10, 33, 22],
-        [29, 15, 28],
-        [6],
-        [2, 1, 5, 7, 2, 0, 5]
-    ]
-    
-    for elements in tests:
-        print(f'Given unsorted array: {elements}')
-        shell_sort(elements)
-        print(f'Array after Sorting : {elements}')

From aa41e6545504826b98d7f8e29e6c06022c509159 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Sun, 25 Oct 2020 16:40:47 +0530
Subject: [PATCH 10/69] Changed to snake_case

---
 .../6_ShellSort/shell_sort_exercise_solution.py      | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/algorithms/6_ShellSort/shell_sort_exercise_solution.py b/algorithms/6_ShellSort/shell_sort_exercise_solution.py
index 0ca51b6..9903870 100644
--- a/algorithms/6_ShellSort/shell_sort_exercise_solution.py
+++ b/algorithms/6_ShellSort/shell_sort_exercise_solution.py
@@ -3,20 +3,20 @@ def shell_sort(arr):
     div = 2
     gap = n//div
     while gap > 0:
-        IndexToDelete = []
+        index_to_delete = []
         for i in range(gap, n):
             temp = arr[i]
             j = i
             while j >= gap and arr[j-gap] >= temp:
                 if arr[j-gap] == temp:
-                    IndexToDelete.append(j)
+                    index_to_delete.append(j)
                 arr[j] = arr[j-gap]
                 j -= gap
             arr[j] = temp
-        IndexToDelete=list(set(IndexToDelete))
-        IndexToDelete.sort()
-        if IndexToDelete:
-            for i in IndexToDelete[-1::-1]:
+        index_to_delete=list(set(index_to_delete))
+        index_to_delete.sort()
+        if index_to_delete:
+            for i in index_to_delete[-1::-1]:
                 del arr[i]
         div *= 2
         n = len(arr)

From 4abac94a717ddf79e503dcf20916a95f6e91f558 Mon Sep 17 00:00:00 2001
From: codebasics <learnpythonlanguage@gmail.com>
Date: Thu, 29 Oct 2020 18:31:42 -0400
Subject: [PATCH 11/69] shell sort

---
 algorithms/6_ShellSort/shell_sort.py | 38 ++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 algorithms/6_ShellSort/shell_sort.py

diff --git a/algorithms/6_ShellSort/shell_sort.py b/algorithms/6_ShellSort/shell_sort.py
new file mode 100644
index 0000000..d689ded
--- /dev/null
+++ b/algorithms/6_ShellSort/shell_sort.py
@@ -0,0 +1,38 @@
+def shell_sort(arr):
+    size = len(arr)
+    gap = size//2
+
+    while gap > 0:
+        for i in range(gap,size):
+            anchor = arr[i]
+            j = i
+            while j>=gap and arr[j-gap]>anchor:
+                arr[j] = arr[j-gap]
+                j -= gap
+            arr[j] = anchor
+        gap = gap // 2
+
+def foo(arr):
+    size = len(arr)
+    gap = size // 2
+    gap = 3
+    for i in range(gap, size):
+        anchor = arr[i]
+        j = i
+        while j>=gap and arr[j-gap]>anchor:
+            arr[j] = arr[j-gap]
+            j -= gap
+        arr[j] = anchor
+
+if __name__ == '__main__':
+    tests = [
+        [89, 78, 61, 53, 23, 21, 17, 12, 9, 7, 6, 2, 1],
+        [],
+        [1,5,8,9],
+        [234,3,1,56,34,12,9,12,1300],
+        [5]
+    ]
+    elements = [89,78,61,53,23,21,17,12,9,7,6,2,1]
+    for elements in tests:
+        shell_sort(elements)
+        print(elements)
\ No newline at end of file

From 268310a11e65faa5744657a8e3695133d796213c Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Fri, 30 Oct 2020 16:42:20 +0530
Subject: [PATCH 12/69] Selection Sort Exercise

---
 algorithms/7_SelectionSort/selection_sort.py  | 28 ++++++++++
 .../selection_sort_exercise.md                | 53 +++++++++++++++++++
 .../selection_sort_exercise_solution.py       | 43 +++++++++++++++
 3 files changed, 124 insertions(+)
 create mode 100644 algorithms/7_SelectionSort/selection_sort.py
 create mode 100644 algorithms/7_SelectionSort/selection_sort_exercise.md
 create mode 100644 algorithms/7_SelectionSort/selection_sort_exercise_solution.py

diff --git a/algorithms/7_SelectionSort/selection_sort.py b/algorithms/7_SelectionSort/selection_sort.py
new file mode 100644
index 0000000..45b2d7d
--- /dev/null
+++ b/algorithms/7_SelectionSort/selection_sort.py
@@ -0,0 +1,28 @@
+
+def selection_sort(elements):
+    for x in range(len(elements)):
+        #Set smallest index unsorted
+        minIndex=x
+        for y in range(x,len(elements)):
+            if elements[y]<elements[minIndex]:##Check if the element at y index is smaller than current minimum
+                minIndex=y##Set new Minimum Index
+        ##Swap the minimum number with first unsorted number
+        if x!=minIndex:
+            elements[x],elements[minIndex]=elements[minIndex],elements[x]
+
+if __name__ == '__main__':
+    #
+    tests = [
+        [11,9,29,7,2,15,28],
+        [3, 7, 9, 11],
+        [25, 22, 21, 10],
+        [29, 15, 28],
+        [],
+        [6]
+    ]
+
+    for elements in tests:
+        print(f'Given unsorted array: {elements}')
+        selection_sort(elements)
+        print(f'Array after Sorting : {elements}')
+        print()
\ No newline at end of file
diff --git a/algorithms/7_SelectionSort/selection_sort_exercise.md b/algorithms/7_SelectionSort/selection_sort_exercise.md
new file mode 100644
index 0000000..1abd357
--- /dev/null
+++ b/algorithms/7_SelectionSort/selection_sort_exercise.md
@@ -0,0 +1,53 @@
+# Exercise: Selection Sort
+
+Implement a Milti-Level Sort of a given list of dictionaries. A single dictionary entry contains two keys 'First Name' and 'Last Name'. the list should be sorted first based on 'First Name', then based on 'Last Name', w.r.t. common/same 'First Name' entries.
+
+
+
+For example, given the sequence List:
+ 
+```
+[
+    {'First Name': 'Raj', 'Last Name': 'Nayyar'},
+    {'First Name': 'Suraj', 'Last Name': 'Sharma'},
+    {'First Name': 'Karan', 'Last Name': 'Kumar'},
+    {'First Name': 'Jade', 'Last Name': 'Canary'},
+    {'First Name': 'Raj', 'Last Name': 'Thakur'},
+    {'First Name': 'Raj', 'Last Name': 'Sharma'},
+    {'First Name': 'Kiran', 'Last Name': 'Kamla'},
+    {'First Name': 'Armaan', 'Last Name': 'Kumar'},
+    {'First Name': 'Jaya', 'Last Name': 'Sharma'},
+    {'First Name': 'Ingrid', 'Last Name': 'Galore'},
+    {'First Name': 'Jaya', 'Last Name': 'Seth'},
+    {'First Name': 'Armaan', 'Last Name': 'Dadra'},
+    {'First Name': 'Ingrid', 'Last Name': 'Maverick'},
+    {'First Name': 'Aahana', 'Last Name': 'Arora'}
+]
+```
+
+Your algorithm should generate sorted list:
+
+```
+[
+    {'First Name': 'Aahana', 'Last Name': 'Arora'}
+    {'First Name': 'Armaan', 'Last Name': 'Dadra'}
+    {'First Name': 'Armaan', 'Last Name': 'Kumar'}
+    {'First Name': 'Ingrid', 'Last Name': 'Galore'}
+    {'First Name': 'Ingrid', 'Last Name': 'Maverick'}
+    {'First Name': 'Jade', 'Last Name': 'Canary'}
+    {'First Name': 'Jaya', 'Last Name': 'Seth'}
+    {'First Name': 'Jaya', 'Last Name': 'Sharma'}
+    {'First Name': 'Karan', 'Last Name': 'Kumar'}
+    {'First Name': 'Kiran', 'Last Name': 'Kamla'}
+    {'First Name': 'Raj', 'Last Name': 'Nayyar'}
+    {'First Name': 'Raj', 'Last Name': 'Sharma'}
+    {'First Name': 'Raj', 'Last Name': 'Thakur'}
+    {'First Name': 'Suraj', 'Last Name': 'Sharma'}
+]
+```
+
+
+
+
+
+ [Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/7_SelectionSort/selection_sort_exercise_solution.py)
\ No newline at end of file
diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
new file mode 100644
index 0000000..6b37464
--- /dev/null
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -0,0 +1,43 @@
+def multilevel_selection_sort(elements):
+    for x in range(len(elements)):
+        minIndex = x
+        for y in range(x, len(elements)):
+            if elements[y]['First Name'] < elements[minIndex]['First Name']:
+                minIndex = y  
+        if x != minIndex:
+            elements[x], elements[minIndex] = elements[minIndex], elements[x]
+    listOfFirstNames=list(set([i['First Name'] for i in elements]))
+    for FName in listOfFirstNames:
+        for x in range(len(elements)):
+            if elements[x]['First Name']==FName:
+                minIndex = x
+                for y in range(x, len(elements)):
+                    if elements[y]['First Name']==FName:
+                        if elements[y]['Last Name'] < elements[minIndex]['Last Name']:
+                            minIndex = y  
+                if x != minIndex:
+                    elements[x], elements[minIndex] = elements[minIndex], elements[x]
+
+if __name__ == '__main__':
+    elements = [
+        {'First Name': 'Raj', 'Last Name': 'Nayyar'},
+        {'First Name': 'Suraj', 'Last Name': 'Sharma'},
+        {'First Name': 'Karan', 'Last Name': 'Kumar'},
+        {'First Name': 'Jade', 'Last Name': 'Canary'},
+        {'First Name': 'Raj', 'Last Name': 'Thakur'},
+        {'First Name': 'Raj', 'Last Name': 'Sharma'},
+        {'First Name': 'Kiran', 'Last Name': 'Kamla'},
+        {'First Name': 'Armaan', 'Last Name': 'Kumar'},
+        {'First Name': 'Jaya', 'Last Name': 'Sharma'},
+        {'First Name': 'Ingrid', 'Last Name': 'Galore'},
+        {'First Name': 'Jaya', 'Last Name': 'Seth'},
+        {'First Name': 'Armaan', 'Last Name': 'Dadra'},
+        {'First Name': 'Ingrid', 'Last Name': 'Maverick'},
+        {'First Name': 'Aahana', 'Last Name': 'Arora'}
+    ]
+
+    print(f'Given unsorted array:',*elements,sep='\n')
+    multilevel_selection_sort(elements)
+    print(f'Array after Multi-Level Sorting:',*elements,sep='\n')
+
+

From 4cbddc3ecb885973486d45289c095aaf203553bb Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Fri, 30 Oct 2020 16:44:17 +0530
Subject: [PATCH 13/69] Minor modification in MD

---
 algorithms/7_SelectionSort/selection_sort_exercise.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise.md b/algorithms/7_SelectionSort/selection_sort_exercise.md
index 1abd357..7b1715b 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise.md
+++ b/algorithms/7_SelectionSort/selection_sort_exercise.md
@@ -25,6 +25,7 @@ For example, given the sequence List:
 ]
 ```
 
+
 Your algorithm should generate sorted list:
 
 ```

From 4adc6d91f83659ac9f4f0f3ef62da98164a14410 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 14:38:36 +0530
Subject: [PATCH 14/69] Fixed CamelCase to snake_case

---
 .../selection_sort_exercise_solution.py       | 28 +++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
index 6b37464..a3cd2d6 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -1,22 +1,22 @@
 def multilevel_selection_sort(elements):
     for x in range(len(elements)):
-        minIndex = x
+        min_index = x
         for y in range(x, len(elements)):
-            if elements[y]['First Name'] < elements[minIndex]['First Name']:
-                minIndex = y  
-        if x != minIndex:
-            elements[x], elements[minIndex] = elements[minIndex], elements[x]
-    listOfFirstNames=list(set([i['First Name'] for i in elements]))
-    for FName in listOfFirstNames:
+            if elements[y]['First Name'] < elements[min_index]['First Name']:
+                min_index = y  
+        if x != min_index:
+            elements[x], elements[min_index] = elements[min_index], elements[x]
+    list_of_firstnames=list(set([i['First Name'] for i in elements]))
+    for firstname in list_of_firstnames:
         for x in range(len(elements)):
-            if elements[x]['First Name']==FName:
-                minIndex = x
+            if elements[x]['First Name']==firstname:
+                min_index = x
                 for y in range(x, len(elements)):
-                    if elements[y]['First Name']==FName:
-                        if elements[y]['Last Name'] < elements[minIndex]['Last Name']:
-                            minIndex = y  
-                if x != minIndex:
-                    elements[x], elements[minIndex] = elements[minIndex], elements[x]
+                    if elements[y]['First Name']==firstname:
+                        if elements[y]['Last Name'] < elements[min_index]['Last Name']:
+                            min_index = y  
+                if x != min_index:
+                    elements[x], elements[min_index] = elements[min_index], elements[x]
 
 if __name__ == '__main__':
     elements = [

From a918f5f3ddcaa006be7b65198410fd435c7be7de Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 15:12:22 +0530
Subject: [PATCH 15/69] Changed multilevel_sort Function to Generalized

---
 .../selection_sort_exercise_solution.py       | 45 +++++++++++++------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
index a3cd2d6..96b5bc8 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -1,22 +1,39 @@
-def multilevel_selection_sort(elements):
+def multilevel_selection_sort(elements,sort_by):
+    set_of_indices=set()
+    for x in range(len(elements)):
+        for kx in (elements[x].keys()):
+            set_of_indices.add(kx)
+    
+    #
+    print(set_of_indices)
+    #
+
+    set_of_indices.remove(sort_by)
+
+    #
+    print(set_of_indices)
+    #
+
     for x in range(len(elements)):
         min_index = x
         for y in range(x, len(elements)):
-            if elements[y]['First Name'] < elements[min_index]['First Name']:
+            if elements[y][sort_by] < elements[min_index][sort_by]:
                 min_index = y  
         if x != min_index:
             elements[x], elements[min_index] = elements[min_index], elements[x]
-    list_of_firstnames=list(set([i['First Name'] for i in elements]))
-    for firstname in list_of_firstnames:
-        for x in range(len(elements)):
-            if elements[x]['First Name']==firstname:
-                min_index = x
-                for y in range(x, len(elements)):
-                    if elements[y]['First Name']==firstname:
-                        if elements[y]['Last Name'] < elements[min_index]['Last Name']:
-                            min_index = y  
-                if x != min_index:
-                    elements[x], elements[min_index] = elements[min_index], elements[x]
+    for indx in set_of_indices:
+        list_of_sortby=list(set([i[sort_by] for i in elements]))
+        for this_of_sort in list_of_sortby:
+            for x in range(len(elements)):
+                if elements[x][sort_by]==this_of_sort:
+                    min_index = x
+                    for y in range(x, len(elements)):
+                        if elements[y][sort_by]==this_of_sort:
+                            if elements[y][indx] < elements[min_index][indx]:
+                                min_index = y  
+                    if x != min_index:
+                        elements[x], elements[min_index] = elements[min_index], elements[x]
+        sort_by=indx
 
 if __name__ == '__main__':
     elements = [
@@ -37,7 +54,7 @@ def multilevel_selection_sort(elements):
     ]
 
     print(f'Given unsorted array:',*elements,sep='\n')
-    multilevel_selection_sort(elements)
+    multilevel_selection_sort(elements,'First Name')
     print(f'Array after Multi-Level Sorting:',*elements,sep='\n')
 
 

From 1ebe3dec1a87a8ec7595ee78f58bb6ed5ad149ec Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 15:13:20 +0530
Subject: [PATCH 16/69] Removed Excessive PrintStatements

---
 .../7_SelectionSort/selection_sort_exercise_solution.py   | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
index 96b5bc8..f092b50 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -4,16 +4,8 @@ def multilevel_selection_sort(elements,sort_by):
         for kx in (elements[x].keys()):
             set_of_indices.add(kx)
     
-    #
-    print(set_of_indices)
-    #
-
     set_of_indices.remove(sort_by)
 
-    #
-    print(set_of_indices)
-    #
-
     for x in range(len(elements)):
         min_index = x
         for y in range(x, len(elements)):

From ea30df3ebfcc9dd522479e6073d60ebdc1e2c370 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 15:52:35 +0530
Subject: [PATCH 17/69] Generalized Sort Function

---
 .../selection_sort_exercise_solution.py       | 73 +++++++------------
 1 file changed, 27 insertions(+), 46 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
index f092b50..393ef0e 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -1,52 +1,33 @@
-def multilevel_selection_sort(elements,sort_by):
-    set_of_indices=set()
-    for x in range(len(elements)):
-        for kx in (elements[x].keys()):
-            set_of_indices.add(kx)
-    
-    set_of_indices.remove(sort_by)
+def multilevel_selection_sort(elements, sort_by_list):
+    for sort_by in sort_by_list[-1::-1]:
+        for x in range(len(elements)):
+            min_index = x
+            for y in range(x, len(elements)):
+                if elements[y][sort_by] < elements[min_index][sort_by]:
+                    min_index = y
+            if x != min_index:
+                elements[x], elements[min_index] = elements[min_index], elements[x]
 
-    for x in range(len(elements)):
-        min_index = x
-        for y in range(x, len(elements)):
-            if elements[y][sort_by] < elements[min_index][sort_by]:
-                min_index = y  
-        if x != min_index:
-            elements[x], elements[min_index] = elements[min_index], elements[x]
-    for indx in set_of_indices:
-        list_of_sortby=list(set([i[sort_by] for i in elements]))
-        for this_of_sort in list_of_sortby:
-            for x in range(len(elements)):
-                if elements[x][sort_by]==this_of_sort:
-                    min_index = x
-                    for y in range(x, len(elements)):
-                        if elements[y][sort_by]==this_of_sort:
-                            if elements[y][indx] < elements[min_index][indx]:
-                                min_index = y  
-                    if x != min_index:
-                        elements[x], elements[min_index] = elements[min_index], elements[x]
-        sort_by=indx
 
 if __name__ == '__main__':
     elements = [
-        {'First Name': 'Raj', 'Last Name': 'Nayyar'},
-        {'First Name': 'Suraj', 'Last Name': 'Sharma'},
-        {'First Name': 'Karan', 'Last Name': 'Kumar'},
-        {'First Name': 'Jade', 'Last Name': 'Canary'},
-        {'First Name': 'Raj', 'Last Name': 'Thakur'},
-        {'First Name': 'Raj', 'Last Name': 'Sharma'},
-        {'First Name': 'Kiran', 'Last Name': 'Kamla'},
-        {'First Name': 'Armaan', 'Last Name': 'Kumar'},
-        {'First Name': 'Jaya', 'Last Name': 'Sharma'},
-        {'First Name': 'Ingrid', 'Last Name': 'Galore'},
-        {'First Name': 'Jaya', 'Last Name': 'Seth'},
-        {'First Name': 'Armaan', 'Last Name': 'Dadra'},
-        {'First Name': 'Ingrid', 'Last Name': 'Maverick'},
-        {'First Name': 'Aahana', 'Last Name': 'Arora'}
+        {'First Name': 'Raj', 'Last Name': 'Nayyar', 'Middle Name': 'B'},
+        {'First Name': 'Suraj', 'Last Name': 'Sharma', 'Middle Name': ''},
+        {'First Name': 'Karan', 'Last Name': 'Kumar', 'Middle Name': ''},
+        {'First Name': 'Jade', 'Last Name': 'Canary', 'Middle Name': ''},
+        {'First Name': 'Raj', 'Last Name': 'Thakur', 'Middle Name': 'A'},
+        {'First Name': 'Raj', 'Last Name': 'Sharma', 'Middle Name': 'A'},
+        {'First Name': 'Kiran', 'Last Name': 'Kamla', 'Middle Name': ''},
+        {'First Name': 'Armaan', 'Last Name': 'Kumar', 'Middle Name': ''},
+        {'First Name': 'Jaya', 'Last Name': 'Sharma', 'Middle Name': ''},
+        {'First Name': 'Ingrid', 'Last Name': 'Galore', 'Middle Name': ''},
+        {'First Name': 'Jaya', 'Last Name': 'Seth', 'Middle Name': ''},
+        {'First Name': 'Armaan', 'Last Name': 'Dadra', 'Middle Name': ''},
+        {'First Name': 'Ingrid', 'Last Name': 'Maverick', 'Middle Name': ''},
+        {'First Name': 'Aahana', 'Last Name': 'Arora', 'Middle Name': ''}
     ]
 
-    print(f'Given unsorted array:',*elements,sep='\n')
-    multilevel_selection_sort(elements,'First Name')
-    print(f'Array after Multi-Level Sorting:',*elements,sep='\n')
-
-
+    print(f'Given unsorted array:', *elements, sep='\n')
+    multilevel_selection_sort(
+        elements, ['First Name', 'Last Name'])
+    print(f'Array after Multi-Level Sorting:', *elements, sep='\n')

From ae2863ee96116619ce3f7e83b172849ee36f1206 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 15:54:25 +0530
Subject: [PATCH 18/69] removed extra data

---
 .../selection_sort_exercise_solution.py       | 28 +++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
index 393ef0e..631c94d 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
+++ b/algorithms/7_SelectionSort/selection_sort_exercise_solution.py
@@ -11,20 +11,20 @@ def multilevel_selection_sort(elements, sort_by_list):
 
 if __name__ == '__main__':
     elements = [
-        {'First Name': 'Raj', 'Last Name': 'Nayyar', 'Middle Name': 'B'},
-        {'First Name': 'Suraj', 'Last Name': 'Sharma', 'Middle Name': ''},
-        {'First Name': 'Karan', 'Last Name': 'Kumar', 'Middle Name': ''},
-        {'First Name': 'Jade', 'Last Name': 'Canary', 'Middle Name': ''},
-        {'First Name': 'Raj', 'Last Name': 'Thakur', 'Middle Name': 'A'},
-        {'First Name': 'Raj', 'Last Name': 'Sharma', 'Middle Name': 'A'},
-        {'First Name': 'Kiran', 'Last Name': 'Kamla', 'Middle Name': ''},
-        {'First Name': 'Armaan', 'Last Name': 'Kumar', 'Middle Name': ''},
-        {'First Name': 'Jaya', 'Last Name': 'Sharma', 'Middle Name': ''},
-        {'First Name': 'Ingrid', 'Last Name': 'Galore', 'Middle Name': ''},
-        {'First Name': 'Jaya', 'Last Name': 'Seth', 'Middle Name': ''},
-        {'First Name': 'Armaan', 'Last Name': 'Dadra', 'Middle Name': ''},
-        {'First Name': 'Ingrid', 'Last Name': 'Maverick', 'Middle Name': ''},
-        {'First Name': 'Aahana', 'Last Name': 'Arora', 'Middle Name': ''}
+        {'First Name': 'Raj', 'Last Name': 'Nayyar'},
+        {'First Name': 'Suraj', 'Last Name': 'Sharma'},
+        {'First Name': 'Karan', 'Last Name': 'Kumar'},
+        {'First Name': 'Jade', 'Last Name': 'Canary'},
+        {'First Name': 'Raj', 'Last Name': 'Thakur'},
+        {'First Name': 'Raj', 'Last Name': 'Sharma'},
+        {'First Name': 'Kiran', 'Last Name': 'Kamla'},
+        {'First Name': 'Armaan', 'Last Name': 'Kumar'},
+        {'First Name': 'Jaya', 'Last Name': 'Sharma'},
+        {'First Name': 'Ingrid', 'Last Name': 'Galore'},
+        {'First Name': 'Jaya', 'Last Name': 'Seth'},
+        {'First Name': 'Armaan', 'Last Name': 'Dadra'},
+        {'First Name': 'Ingrid', 'Last Name': 'Maverick'},
+        {'First Name': 'Aahana', 'Last Name': 'Arora'}
     ]
 
     print(f'Given unsorted array:', *elements, sep='\n')

From 701666eeead9ab14edb027ab16cc74924afbd4f3 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 16:14:06 +0530
Subject: [PATCH 19/69] removed selection sort

---
 algorithms/7_SelectionSort/selection_sort.py | 28 --------------------
 1 file changed, 28 deletions(-)
 delete mode 100644 algorithms/7_SelectionSort/selection_sort.py

diff --git a/algorithms/7_SelectionSort/selection_sort.py b/algorithms/7_SelectionSort/selection_sort.py
deleted file mode 100644
index 45b2d7d..0000000
--- a/algorithms/7_SelectionSort/selection_sort.py
+++ /dev/null
@@ -1,28 +0,0 @@
-
-def selection_sort(elements):
-    for x in range(len(elements)):
-        #Set smallest index unsorted
-        minIndex=x
-        for y in range(x,len(elements)):
-            if elements[y]<elements[minIndex]:##Check if the element at y index is smaller than current minimum
-                minIndex=y##Set new Minimum Index
-        ##Swap the minimum number with first unsorted number
-        if x!=minIndex:
-            elements[x],elements[minIndex]=elements[minIndex],elements[x]
-
-if __name__ == '__main__':
-    #
-    tests = [
-        [11,9,29,7,2,15,28],
-        [3, 7, 9, 11],
-        [25, 22, 21, 10],
-        [29, 15, 28],
-        [],
-        [6]
-    ]
-
-    for elements in tests:
-        print(f'Given unsorted array: {elements}')
-        selection_sort(elements)
-        print(f'Array after Sorting : {elements}')
-        print()
\ No newline at end of file

From 12fe94bed9296c7303e6ed0aa85a4d7fbdde5a22 Mon Sep 17 00:00:00 2001
From: Master Amitoj <universaldistructor@gmail.com>
Date: Mon, 2 Nov 2020 17:33:45 +0530
Subject: [PATCH 20/69] Updated .md to describe the generalized problem

---
 algorithms/7_SelectionSort/selection_sort_exercise.md | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/algorithms/7_SelectionSort/selection_sort_exercise.md b/algorithms/7_SelectionSort/selection_sort_exercise.md
index 7b1715b..a2e8b44 100644
--- a/algorithms/7_SelectionSort/selection_sort_exercise.md
+++ b/algorithms/7_SelectionSort/selection_sort_exercise.md
@@ -1,10 +1,15 @@
 # Exercise: Selection Sort
 
-Implement a Milti-Level Sort of a given list of dictionaries. A single dictionary entry contains two keys 'First Name' and 'Last Name'. the list should be sorted first based on 'First Name', then based on 'Last Name', w.r.t. common/same 'First Name' entries.
+Implement a Multi-Level Sort of a given list of dictionaries based on a given sorting order. If user wants to sort dictionary based on First Key 'A', Then Key 'B', they shall pass list of keys in the order of  preference as a list ['A','B']. Your code should be able to sort list of dictionaries for any number of keys in sorting order list.
 
+Using this multi-level sort, you should be able to sort any list of dictionaries based on sorting order preference
 
+Example:
+A single dictionary entry contains two keys 'First Name' and 'Last Name'. the list should be sorted first based on 'First Name', then based on 'Last Name', w.r.t. common/same 'First Name' entries.
 
-For example, given the sequence List:
+for this, one shall past sorting order of preference list [ 'First Name' , 'Last Name' ]
+
+For this, Given the following sequence List:
  
 ```
 [

From 3034b38eb58724c42eb3593399ee39532d380391 Mon Sep 17 00:00:00 2001
From: codebasics <learnpythonlanguage@gmail.com>
Date: Wed, 25 Nov 2020 17:43:18 -0500
Subject: [PATCH 21/69] selection sort

---
 algorithms/7_SelectionSort/selection_sort.py | 24 ++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 algorithms/7_SelectionSort/selection_sort.py

diff --git a/algorithms/7_SelectionSort/selection_sort.py b/algorithms/7_SelectionSort/selection_sort.py
new file mode 100644
index 0000000..1617ad2
--- /dev/null
+++ b/algorithms/7_SelectionSort/selection_sort.py
@@ -0,0 +1,24 @@
+
+def selection_sort(arr):
+    size = len(arr)
+    for i in range(size-1):
+        min_index = i
+        for j in range(min_index+1,size):
+            if arr[j] < arr[min_index]:
+                min_index = j
+        if i != min_index:
+            arr[i], arr[min_index] = arr[min_index], arr[i]
+
+
+if __name__ == '__main__':
+    tests = [
+        [89, 78, 61, 53, 23, 21, 17, 12, 9, 7, 6, 2, 1],
+        [],
+        [1,5,8,9],
+        [234,3,1,56,34,12,9,12,1300],
+        [78, 12, 15, 8, 61, 53, 23, 27],
+        [5]
+    ]
+    for elements in tests:
+        selection_sort(elements)
+        print(elements)
\ No newline at end of file

From 64ea23ca894677286c2e619d029ea0ffdb465e1d Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:41:01 +0530
Subject: [PATCH 22/69] Create dfs.py

---
 algorithms/8_depth_first_search/dfs.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 algorithms/8_depth_first_search/dfs.py

diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_depth_first_search/dfs.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/algorithms/8_depth_first_search/dfs.py
@@ -0,0 +1 @@
+

From dd12f8bdb2250b52a3b24dedf72d93b104dad9fc Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:41:38 +0530
Subject: [PATCH 23/69] Create breadth_first_search.py

---
 .../breadth_first_search.py                   | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 9_breadth_first_search/breadth_first_search.py

diff --git a/9_breadth_first_search/breadth_first_search.py b/9_breadth_first_search/breadth_first_search.py
new file mode 100644
index 0000000..842441e
--- /dev/null
+++ b/9_breadth_first_search/breadth_first_search.py
@@ -0,0 +1,24 @@
+def bfs(Data, start, visited=set()):
+
+    queue = [start]
+    
+    while queue:
+        currentnode = queue.pop(0)
+        if currentnode not in visited: print(currentnode, end = " ")
+        visited.add(currentnode)
+        
+        for i in Data[currentnode] - visited:
+            queue.append(i)
+            
+    return
+        
+        
+Data = {'A': {'B'},
+        'B': {'A', 'C', 'D'},
+        'C': {'B', 'E'},
+        'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'},
+        'F': {'E'}}
+        
+if __name__ == '__main__':
+    bfs(Data, 'A')

From 44b16f51578cd72caaa7785af893dc63d15dd44f Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:41:54 +0530
Subject: [PATCH 24/69] Update dfs.py

---
 algorithms/8_depth_first_search/dfs.py | 31 ++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_depth_first_search/dfs.py
index 8b13789..e867850 100644
--- a/algorithms/8_depth_first_search/dfs.py
+++ b/algorithms/8_depth_first_search/dfs.py
@@ -1 +1,32 @@
+#function for depth first search
+def dfs(Data, start, visited=set()):
+    
+    #if not visited print it
+    if start not in visited:
+        print(start,end=" ")
+        
+    visited.add(start)
 
+
+    for i in Data[start] - visited:
+        
+        #if not visited gi in depth of it
+        dfs(Data, i, visited)
+        
+    return 
+
+
+
+#sample data in dictionary form
+Data = {'A': {'B'},
+        'B': {'A', 'C', 'D'},
+        'C': {'B', 'E'},
+        'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'},
+        'F': {'E'}}
+
+
+
+if __name__ == '__main__':
+
+    dfs(Data, 'A')

From 5bf76d59e9095bba5f3150c4051dcb263f4e3c3a Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:42:26 +0530
Subject: [PATCH 25/69] Add files via upload

---
 .../8_depth_first_search/Dfs_Exerscise.md     |  44 ++++++++++++++++++
 .../8_depth_first_search/Dfs_exercise.py      |  36 ++++++++++++++
 algorithms/8_depth_first_search/emp.png       | Bin 0 -> 10334 bytes
 .../8_depth_first_search/updated_graph.jpg    | Bin 0 -> 17665 bytes
 4 files changed, 80 insertions(+)
 create mode 100644 algorithms/8_depth_first_search/Dfs_Exerscise.md
 create mode 100644 algorithms/8_depth_first_search/Dfs_exercise.py
 create mode 100644 algorithms/8_depth_first_search/emp.png
 create mode 100644 algorithms/8_depth_first_search/updated_graph.jpg

diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/Dfs_Exerscise.md
new file mode 100644
index 0000000..c50adb5
--- /dev/null
+++ b/algorithms/8_depth_first_search/Dfs_Exerscise.md
@@ -0,0 +1,44 @@
+# DFS Exercise
+
+![alt text](https://github.com/beladiyadarshan/Dfs/blob/main/emp.png?raw=true)
+
+Given a Graph in Dictionary Form 
+
+-print all employees who are reporting to given employee
+
+```
+Data = {"karan": {"darshan","nikhil"},
+        "darshan": {"khantil", "tanuj"},
+        'tanuj': {"nikhil"},
+        "krinish": {"hetul"},
+        "khantil" : set(),
+        "nikhil" : set()
+        }
+        
+    
+ ```
+ 
+ here darshan and nikhil are reporting to karan and so on....
+ 
+ ```
+ Q.find all employees who are reporting to karan
+         -do dfs on karan and print all the employees
+ ```
+
+**Explanation :**
+
+-so here we wants to find all the childs of karan 
+
+-we will do dfs on karan and then we will traverse all the childs of karan that are not visited 
+
+**output will be :**
+
+karan : nikhil darshan tanuj khantil 
+
+[Solution](https://github.com/beladiyadarshan/Dfs/blob/main/Dfs_exercise.py)
+
+
+ 
+
+
+
diff --git a/algorithms/8_depth_first_search/Dfs_exercise.py b/algorithms/8_depth_first_search/Dfs_exercise.py
new file mode 100644
index 0000000..c009db1
--- /dev/null
+++ b/algorithms/8_depth_first_search/Dfs_exercise.py
@@ -0,0 +1,36 @@
+#function for depth first search
+def dfs(Data, start,emp,visited=set()):
+    
+    #if not visited print it
+    if start not in visited:
+        print(start,end=" ")
+        
+        if start==emp:
+            print(":",end=" ")
+        
+    
+    visited.add(start)
+
+
+    for i in Data[start] - visited:
+        
+        #if not visited go in depth of it
+        dfs(Data, i, visited)
+        
+    return 
+
+
+
+#sample data in dictionary form
+Data = {"karan": {"darshan","nikhil"},
+        "darshan": {"khantil", "tanuj"},
+        'tanuj': {"nikhil"},
+        "krinish": {"hetul"},
+        "khantil" : set(),
+        "nikhil" : set()
+        }
+
+
+if __name__ == '__main__':
+
+    dfs(Data, "karan","karan")
diff --git a/algorithms/8_depth_first_search/emp.png b/algorithms/8_depth_first_search/emp.png
new file mode 100644
index 0000000000000000000000000000000000000000..0815ec8f8908a03f2c4156d2f29b3d3ea4379f56
GIT binary patch
literal 10334
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

literal 0
HcmV?d00001

diff --git a/algorithms/8_depth_first_search/updated_graph.jpg b/algorithms/8_depth_first_search/updated_graph.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e39ecc645480bc84d7ab24302cbfe1e1c5a851a2
GIT binary patch
literal 17665
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

literal 0
HcmV?d00001


From 87e7baa9148fa8c308ffd2b9f3b4d815d7b8496c Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:43:01 +0530
Subject: [PATCH 26/69] Create breadth_first_search_exercise.md

---
 .../breadth_first_search_exercise.md          | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 9_breadth_first_search/breadth_first_search_exercise.md

diff --git a/9_breadth_first_search/breadth_first_search_exercise.md b/9_breadth_first_search/breadth_first_search_exercise.md
new file mode 100644
index 0000000..99d91dd
--- /dev/null
+++ b/9_breadth_first_search/breadth_first_search_exercise.md
@@ -0,0 +1,35 @@
+# BFS_Traversal
+BFS Traversal of a graph in python using graph given in dictionary
+
+Implement a program to find whether a path exists for an airline route or not. The routes are described using graph having nodes. The names of the graphs are named alphabet characters for easy understanding. Print the path if it exists; print the denying statement if it doesn't!
+
+Example: A, B, C, D, E, F are the nodes of the graph.
+
+
+For example, you are given following data: 
+
+```
+Data = {'A': {'B'},
+        'B': {'A', 'C', 'D'},
+        'C': {'B', 'E'},
+        'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'},
+        'F': {'E'}}
+```
+
+the resultant graph will be :-
+
+![alt text](https://github.com/nikhilailani/BFS_Traversal/blob/main/DFS_BFS_Graph.png)
+
+
+**Explanation:** Here, selecting A as source node and D as destination node, the values are passed to the function.
+
+Your output should look like this:
+
+'''
+Path exists!
+Path : A->B->D
+'''
+
+[Solution](https://github.com/nikhilailani/BFS_Traversal/blob/main/bfs_exercise_solution.py)
+

From 0dc70eb7c5369ad044f2566a0d2ba14c29069c82 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:44:33 +0530
Subject: [PATCH 27/69] Delete breadth_first_search.py

---
 .../breadth_first_search.py                   | 24 -------------------
 1 file changed, 24 deletions(-)
 delete mode 100644 9_breadth_first_search/breadth_first_search.py

diff --git a/9_breadth_first_search/breadth_first_search.py b/9_breadth_first_search/breadth_first_search.py
deleted file mode 100644
index 842441e..0000000
--- a/9_breadth_first_search/breadth_first_search.py
+++ /dev/null
@@ -1,24 +0,0 @@
-def bfs(Data, start, visited=set()):
-
-    queue = [start]
-    
-    while queue:
-        currentnode = queue.pop(0)
-        if currentnode not in visited: print(currentnode, end = " ")
-        visited.add(currentnode)
-        
-        for i in Data[currentnode] - visited:
-            queue.append(i)
-            
-    return
-        
-        
-Data = {'A': {'B'},
-        'B': {'A', 'C', 'D'},
-        'C': {'B', 'E'},
-        'D': {'B', 'E'},
-        'E': {'C', 'D', 'F'},
-        'F': {'E'}}
-        
-if __name__ == '__main__':
-    bfs(Data, 'A')

From 50db494fa731c5f58609d18493bc608ce240ae14 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:44:54 +0530
Subject: [PATCH 28/69] Delete breadth_first_search_exercise.md

---
 .../breadth_first_search_exercise.md          | 35 -------------------
 1 file changed, 35 deletions(-)
 delete mode 100644 9_breadth_first_search/breadth_first_search_exercise.md

diff --git a/9_breadth_first_search/breadth_first_search_exercise.md b/9_breadth_first_search/breadth_first_search_exercise.md
deleted file mode 100644
index 99d91dd..0000000
--- a/9_breadth_first_search/breadth_first_search_exercise.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# BFS_Traversal
-BFS Traversal of a graph in python using graph given in dictionary
-
-Implement a program to find whether a path exists for an airline route or not. The routes are described using graph having nodes. The names of the graphs are named alphabet characters for easy understanding. Print the path if it exists; print the denying statement if it doesn't!
-
-Example: A, B, C, D, E, F are the nodes of the graph.
-
-
-For example, you are given following data: 
-
-```
-Data = {'A': {'B'},
-        'B': {'A', 'C', 'D'},
-        'C': {'B', 'E'},
-        'D': {'B', 'E'},
-        'E': {'C', 'D', 'F'},
-        'F': {'E'}}
-```
-
-the resultant graph will be :-
-
-![alt text](https://github.com/nikhilailani/BFS_Traversal/blob/main/DFS_BFS_Graph.png)
-
-
-**Explanation:** Here, selecting A as source node and D as destination node, the values are passed to the function.
-
-Your output should look like this:
-
-'''
-Path exists!
-Path : A->B->D
-'''
-
-[Solution](https://github.com/nikhilailani/BFS_Traversal/blob/main/bfs_exercise_solution.py)
-

From 8eafbd8bea33e5e66123934325b86f348bd62c40 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:45:29 +0530
Subject: [PATCH 29/69] Create 9_breadth_first_search

---
 algorithms/9_breadth_first_search | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 algorithms/9_breadth_first_search

diff --git a/algorithms/9_breadth_first_search b/algorithms/9_breadth_first_search
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/algorithms/9_breadth_first_search
@@ -0,0 +1 @@
+

From 9a0d3b4dc259d7420f6ad3afa21875026a323677 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:45:56 +0530
Subject: [PATCH 30/69] Delete 9_breadth_first_search

---
 algorithms/9_breadth_first_search | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 algorithms/9_breadth_first_search

diff --git a/algorithms/9_breadth_first_search b/algorithms/9_breadth_first_search
deleted file mode 100644
index 8b13789..0000000
--- a/algorithms/9_breadth_first_search
+++ /dev/null
@@ -1 +0,0 @@
-

From 12828279dcb6f5f9f6babb53fa83aacaf4a565ba Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:46:36 +0530
Subject: [PATCH 31/69] Create bfs.py

---
 algorithms/9_Breadth_First_Search/bfs.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 algorithms/9_Breadth_First_Search/bfs.py

diff --git a/algorithms/9_Breadth_First_Search/bfs.py b/algorithms/9_Breadth_First_Search/bfs.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/algorithms/9_Breadth_First_Search/bfs.py
@@ -0,0 +1 @@
+

From 3cc88661a29ce12bae6454740b01043328ad01e6 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:47:48 +0530
Subject: [PATCH 32/69] Delete bfs.py

---
 algorithms/9_Breadth_First_Search/bfs.py | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 algorithms/9_Breadth_First_Search/bfs.py

diff --git a/algorithms/9_Breadth_First_Search/bfs.py b/algorithms/9_Breadth_First_Search/bfs.py
deleted file mode 100644
index 8b13789..0000000
--- a/algorithms/9_Breadth_First_Search/bfs.py
+++ /dev/null
@@ -1 +0,0 @@
-

From dee5947c2738627a9904ad9029c88245205cc35b Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:49:11 +0530
Subject: [PATCH 33/69] Create bfs.py

---
 algorithms/9_BreadthFirstSearch/bfs.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 algorithms/9_BreadthFirstSearch/bfs.py

diff --git a/algorithms/9_BreadthFirstSearch/bfs.py b/algorithms/9_BreadthFirstSearch/bfs.py
new file mode 100644
index 0000000..842441e
--- /dev/null
+++ b/algorithms/9_BreadthFirstSearch/bfs.py
@@ -0,0 +1,24 @@
+def bfs(Data, start, visited=set()):
+
+    queue = [start]
+    
+    while queue:
+        currentnode = queue.pop(0)
+        if currentnode not in visited: print(currentnode, end = " ")
+        visited.add(currentnode)
+        
+        for i in Data[currentnode] - visited:
+            queue.append(i)
+            
+    return
+        
+        
+Data = {'A': {'B'},
+        'B': {'A', 'C', 'D'},
+        'C': {'B', 'E'},
+        'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'},
+        'F': {'E'}}
+        
+if __name__ == '__main__':
+    bfs(Data, 'A')

From ca1904fde9579be0fa2b244c41b42ea16b2b0d56 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:50:50 +0530
Subject: [PATCH 34/69] Update bfs.py

---
 algorithms/9_BreadthFirstSearch/bfs.py | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs.py b/algorithms/9_BreadthFirstSearch/bfs.py
index 842441e..137ad87 100644
--- a/algorithms/9_BreadthFirstSearch/bfs.py
+++ b/algorithms/9_BreadthFirstSearch/bfs.py
@@ -1,24 +1,24 @@
-def bfs(Data, start, visited=set()):
+def bfs(data, start, visited=set()):
 
     queue = [start]
     
     while queue:
-        currentnode = queue.pop(0)
-        if currentnode not in visited: print(currentnode, end = " ")
-        visited.add(currentnode)
+        current_node = queue.pop(0)
+        if current_node not in visited: print(current_node, end = " ")
+        visited.add(current_node)
         
-        for i in Data[currentnode] - visited:
+        for i in data[current_node] - visited:
             queue.append(i)
             
     return
         
-        
-Data = {'A': {'B'},
+if __name__ == '__main__':
+    
+    data = {'A': {'B'},
         'B': {'A', 'C', 'D'},
         'C': {'B', 'E'},
         'D': {'B', 'E'},
         'E': {'C', 'D', 'F'},
         'F': {'E'}}
-        
-if __name__ == '__main__':
-    bfs(Data, 'A')
+    
+    bfs(data, 'A')

From cf7917fb61b23b9e76cc074424690f6c12179320 Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:50:52 +0530
Subject: [PATCH 35/69] Update dfs.py

---
 algorithms/8_depth_first_search/dfs.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_depth_first_search/dfs.py
index e867850..5cb909f 100644
--- a/algorithms/8_depth_first_search/dfs.py
+++ b/algorithms/8_depth_first_search/dfs.py
@@ -1,5 +1,5 @@
 #function for depth first search
-def dfs(Data, start, visited=set()):
+def dfs(data, start, visited=set()):
     
     #if not visited print it
     if start not in visited:
@@ -8,17 +8,17 @@ def dfs(Data, start, visited=set()):
     visited.add(start)
 
 
-    for i in Data[start] - visited:
+    for i in data[start] - visited:
         
         #if not visited gi in depth of it
-        dfs(Data, i, visited)
+        dfs(data, i, visited)
         
     return 
 
 
 
 #sample data in dictionary form
-Data = {'A': {'B'},
+data = {'A': {'B'},
         'B': {'A', 'C', 'D'},
         'C': {'B', 'E'},
         'D': {'B', 'E'},
@@ -29,4 +29,4 @@ def dfs(Data, start, visited=set()):
 
 if __name__ == '__main__':
 
-    dfs(Data, 'A')
+    dfs(data, 'A')

From f5c428914aa26c5ff702a6ca243a961b4f72be5e Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:51:48 +0530
Subject: [PATCH 36/69] Update Dfs_exercise.py

---
 algorithms/8_depth_first_search/Dfs_exercise.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/algorithms/8_depth_first_search/Dfs_exercise.py b/algorithms/8_depth_first_search/Dfs_exercise.py
index c009db1..92badb8 100644
--- a/algorithms/8_depth_first_search/Dfs_exercise.py
+++ b/algorithms/8_depth_first_search/Dfs_exercise.py
@@ -1,5 +1,5 @@
 #function for depth first search
-def dfs(Data, start,emp,visited=set()):
+def dfs(data, start,emp,visited=set()):
     
     #if not visited print it
     if start not in visited:
@@ -12,17 +12,17 @@ def dfs(Data, start,emp,visited=set()):
     visited.add(start)
 
 
-    for i in Data[start] - visited:
+    for i in data[start] - visited:
         
         #if not visited go in depth of it
-        dfs(Data, i, visited)
+        dfs(data, i, visited)
         
     return 
 
 
 
 #sample data in dictionary form
-Data = {"karan": {"darshan","nikhil"},
+data = {"karan": {"darshan","nikhil"},
         "darshan": {"khantil", "tanuj"},
         'tanuj': {"nikhil"},
         "krinish": {"hetul"},
@@ -33,4 +33,4 @@ def dfs(Data, start,emp,visited=set()):
 
 if __name__ == '__main__':
 
-    dfs(Data, "karan","karan")
+    dfs(data, "karan","karan")

From 39df8b75327c7aca50e7f8f8c9b65cb954c41071 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:52:18 +0530
Subject: [PATCH 37/69] Create bfs_exercise.md

---
 .../9_BreadthFirstSearch/bfs_exercise.md      | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 algorithms/9_BreadthFirstSearch/bfs_exercise.md

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
new file mode 100644
index 0000000..0efc20f
--- /dev/null
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -0,0 +1,34 @@
+# BFS_Traversal
+BFS Traversal of a graph in python using graph given in dictionary
+
+Implement a program to find whether a path exists for an airline route or not. The routes are described using graph having nodes. The names of the graphs are named alphabet characters for easy understanding. Print the path if it exists; print the denying statement if it doesn't!
+
+Example: A, B, C, D, E, F are the nodes of the graph.
+
+
+For example, you are given following data: 
+
+```
+data = {'A': {'B'},
+        'B': {'A', 'C', 'D'},
+        'C': {'B', 'E'},
+        'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'},
+        'F': {'E'}}
+```
+
+the resultant graph will be :-
+
+![alt text](https://github.com/nikhilailani/BFS_Traversal/blob/main/DFS_BFS_Graph.png)
+
+
+**Explanation:** Here, selecting A as source node and D as destination node, the values are passed to the function.
+
+Your output should look like this:
+
+'''
+Path exists!
+Path : A->B->D
+'''
+
+[Solution](https://github.com/nikhilailani/BFS_Traversal/blob/main/bfs_exercise_solution.py)

From 5f1c5f8938424a00fdc16cdff88bd948fb26a914 Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:52:37 +0530
Subject: [PATCH 38/69] Update Dfs_Exerscise.md

---
 algorithms/8_depth_first_search/Dfs_Exerscise.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/Dfs_Exerscise.md
index c50adb5..e785e9a 100644
--- a/algorithms/8_depth_first_search/Dfs_Exerscise.md
+++ b/algorithms/8_depth_first_search/Dfs_Exerscise.md
@@ -7,7 +7,7 @@ Given a Graph in Dictionary Form
 -print all employees who are reporting to given employee
 
 ```
-Data = {"karan": {"darshan","nikhil"},
+data = {"karan": {"darshan","nikhil"},
         "darshan": {"khantil", "tanuj"},
         'tanuj': {"nikhil"},
         "krinish": {"hetul"},

From 8adbdedd2d2ea18d19cf06d19760c012fc02d616 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:54:14 +0530
Subject: [PATCH 39/69] Create bfs_exercise_solution.py

---
 .../bfs_exercise_solution.py                  | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
new file mode 100644
index 0000000..51ea270
--- /dev/null
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
@@ -0,0 +1,27 @@
+def bfs(data, start, end, visited=[]):
+    queue = [start]
+    
+    while queue:
+        current_node = queue.pop(0)
+        if current_node==end:
+            print("Path exists!")
+            print("Path : " + "->".join(visited) + "->"+end)
+            return
+        visited.append(current_node)
+        
+        for i in data[current_node] - set(visited):
+            queue.append(i)
+    print("Path does not exist!")    
+    return
+        
+        
+
+        
+if __name__ == '__main__':
+  data = {'A': {'B'},
+        'B': {'C', 'D'},
+        'C': {'E'},
+        'D': {'E'},
+        'E': {'F'},
+        'F': set()}
+  bfs(data, 'A', 'D')

From 7d58e11687bcef1bfa37d543e82a1eb5d6f4e908 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:54:51 +0530
Subject: [PATCH 40/69] Add files via upload

---
 .../9_BreadthFirstSearch/DFS_BFS_Graph.png       | Bin 0 -> 9388 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png

diff --git a/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png b/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..db439bbe3913ae7055536c3855d772b21c2c76af
GIT binary patch
literal 9388
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
G+<yX3BsX{f

literal 0
HcmV?d00001


From fef07b8b6b06141450eed4b5b7350230ac5d443c Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:56:37 +0530
Subject: [PATCH 41/69] Update bfs_exercise.md

---
 algorithms/9_BreadthFirstSearch/bfs_exercise.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
index 0efc20f..627709c 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise.md
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -19,7 +19,7 @@ data = {'A': {'B'},
 
 the resultant graph will be :-
 
-![alt text](https://github.com/nikhilailani/BFS_Traversal/blob/main/DFS_BFS_Graph.png)
+![alt text](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png)
 
 
 **Explanation:** Here, selecting A as source node and D as destination node, the values are passed to the function.
@@ -31,4 +31,4 @@ Path exists!
 Path : A->B->D
 '''
 
-[Solution](https://github.com/nikhilailani/BFS_Traversal/blob/main/bfs_exercise_solution.py)
+[Solution](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.pngbfs_exercise_solution.py)

From 7d9cac46e1d6e40d666f437983c0ed069eb15d0b Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Mon, 7 Dec 2020 16:57:17 +0530
Subject: [PATCH 42/69] Update bfs_exercise.md

---
 algorithms/9_BreadthFirstSearch/bfs_exercise.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
index 627709c..9384e8a 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise.md
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -31,4 +31,4 @@ Path exists!
 Path : A->B->D
 '''
 
-[Solution](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.pngbfs_exercise_solution.py)
+[Solution](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py)

From e381bc8e434d2ab7769220090c26603c9f67584d Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Wed, 23 Dec 2020 09:07:18 +0530
Subject: [PATCH 43/69] Update Dfs_Exerscise.md

---
 algorithms/8_depth_first_search/Dfs_Exerscise.md | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/Dfs_Exerscise.md
index e785e9a..710092a 100644
--- a/algorithms/8_depth_first_search/Dfs_Exerscise.md
+++ b/algorithms/8_depth_first_search/Dfs_Exerscise.md
@@ -1,10 +1,8 @@
 # DFS Exercise
 
-![alt text](https://github.com/beladiyadarshan/Dfs/blob/main/emp.png?raw=true)
+![Overview : Employee hierarchy](https://github.com/beladiyadarshan/Dfs/blob/main/emp.png?raw=true)
 
-Given a Graph in Dictionary Form 
-
--print all employees who are reporting to given employee
+Given a Graph in Dictionary Form.You have to print all employees who are reporting to given employee
 
 ```
 data = {"karan": {"darshan","nikhil"},

From d6acab4c1b507858d2098634513f89a85cee8a6a Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Wed, 23 Dec 2020 09:07:47 +0530
Subject: [PATCH 44/69] Update Dfs_exercise.py

---
 algorithms/8_depth_first_search/Dfs_exercise.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/algorithms/8_depth_first_search/Dfs_exercise.py b/algorithms/8_depth_first_search/Dfs_exercise.py
index 92badb8..09a74bf 100644
--- a/algorithms/8_depth_first_search/Dfs_exercise.py
+++ b/algorithms/8_depth_first_search/Dfs_exercise.py
@@ -1,11 +1,11 @@
 #function for depth first search
-def dfs(data, start,emp,visited=set()):
+def dfs(data, start,employee,visited=set()):
     
     #if not visited print it
     if start not in visited:
         print(start,end=" ")
         
-        if start==emp:
+        if start==employee:
             print(":",end=" ")
         
     

From 23a6cc984544cb8cb058f90aa6cbe1cda507afe6 Mon Sep 17 00:00:00 2001
From: d_p_beladiya <darshan@atliq.com>
Date: Wed, 23 Dec 2020 10:13:22 +0530
Subject: [PATCH 45/69] flake 8 convention followed

---
 .../8_depth_first_search/Dfs_exercise.py      | 43 ++++++++-----------
 algorithms/8_depth_first_search/dfs.py        | 22 ++++------
 2 files changed, 27 insertions(+), 38 deletions(-)

diff --git a/algorithms/8_depth_first_search/Dfs_exercise.py b/algorithms/8_depth_first_search/Dfs_exercise.py
index 09a74bf..d6c98d4 100644
--- a/algorithms/8_depth_first_search/Dfs_exercise.py
+++ b/algorithms/8_depth_first_search/Dfs_exercise.py
@@ -1,36 +1,29 @@
-#function for depth first search
-def dfs(data, start,employee,visited=set()):
-    
-    #if not visited print it
+# function for depth first search
+def dfs(data, start, employee, visited=set()):
+    # if not visited print it
     if start not in visited:
-        print(start,end=" ")
-        
-        if start==employee:
-            print(":",end=" ")
-        
-    
+        print(start, end=" ")
+        if start == employee:
+            print(":", end=" ")
     visited.add(start)
 
-
     for i in data[start] - visited:
-        
-        #if not visited go in depth of it
+        # if not visited go in depth of it
         dfs(data, i, visited)
-        
-    return 
-
+    return
 
 
-#sample data in dictionary form
-data = {"karan": {"darshan","nikhil"},
-        "darshan": {"khantil", "tanuj"},
-        'tanuj': {"nikhil"},
-        "krinish": {"hetul"},
-        "khantil" : set(),
-        "nikhil" : set()
-        }
+# sample data in dictionary form
+data = {
+    "karan": {"darshan", "nikhil"},
+    "darshan": {"khantil", "tanuj"},
+    'tanuj': {"nikhil"},
+    "krinish": {"hetul"},
+    "khantil": set(),
+    "nikhil": set()
+    }
 
 
 if __name__ == '__main__':
 
-    dfs(data, "karan","karan")
+    dfs(data, "karan", "karan")
diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_depth_first_search/dfs.py
index 5cb909f..1671f4e 100644
--- a/algorithms/8_depth_first_search/dfs.py
+++ b/algorithms/8_depth_first_search/dfs.py
@@ -1,23 +1,20 @@
-#function for depth first search
+# function for depth first search
 def dfs(data, start, visited=set()):
-    
-    #if not visited print it
+
+    # if not visited print it
     if start not in visited:
-        print(start,end=" ")
-        
-    visited.add(start)
+        print(start, end=" ")
 
+    visited.add(start)
 
     for i in data[start] - visited:
-        
-        #if not visited gi in depth of it
-        dfs(data, i, visited)
-        
-    return 
 
+        # if not visited gi in depth of it
+        dfs(data, i, visited)
+    return
 
 
-#sample data in dictionary form
+# sample data in dictionary form
 data = {'A': {'B'},
         'B': {'A', 'C', 'D'},
         'C': {'B', 'E'},
@@ -26,7 +23,6 @@ def dfs(data, start, visited=set()):
         'F': {'E'}}
 
 
-
 if __name__ == '__main__':
 
     dfs(data, 'A')

From c199807d83e9fa3375c058c94629a10130729972 Mon Sep 17 00:00:00 2001
From: d_p_beladiya <darshan@atliq.com>
Date: Wed, 23 Dec 2020 10:33:52 +0530
Subject: [PATCH 46/69] Modified md file

---
 .../8_depth_first_search/Dfs_Exerscise.md     | 26 +++++++------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/Dfs_Exerscise.md
index 710092a..7f0b295 100644
--- a/algorithms/8_depth_first_search/Dfs_Exerscise.md
+++ b/algorithms/8_depth_first_search/Dfs_Exerscise.md
@@ -1,8 +1,8 @@
 # DFS Exercise
 
-![Overview : Employee hierarchy](https://github.com/beladiyadarshan/Dfs/blob/main/emp.png?raw=true)
+![Overview : Employee hierarchy](https://github.com/beladiyadarshan/DFS/blob/main/emp.png?raw=true)
 
-Given a Graph in Dictionary Form.You have to print all employees who are reporting to given employee
+Given a graph in dictionary form, print all employees reporting to given employee.
 
 ```
 data = {"karan": {"darshan","nikhil"},
@@ -16,27 +16,21 @@ data = {"karan": {"darshan","nikhil"},
     
  ```
  
- here darshan and nikhil are reporting to karan and so on....
+ Here, Darshan and Nikhil are reporting to Karan and so on...
  
  ```
- Q.find all employees who are reporting to karan
-         -do dfs on karan and print all the employees
+ Q.Find all employees who are reporting to Karan
+        -perform DFS on Karan and print all the employees
  ```
 
-**Explanation :**
+**Explanation:**
 
--so here we wants to find all the childs of karan 
+-So here, we want to find all the children of Karan.
 
--we will do dfs on karan and then we will traverse all the childs of karan that are not visited 
+-We will perform DFS on Karan and then traverse all the children of Karan which are unvisited. 
 
-**output will be :**
+**Output:**
 
 karan : nikhil darshan tanuj khantil 
 
-[Solution](https://github.com/beladiyadarshan/Dfs/blob/main/Dfs_exercise.py)
-
-
- 
-
-
-
+[Solution](https://github.com/beladiyadarshan/DFS/blob/main/DFS_exercise.py)

From be6438480d48434efa02570a315b800fcb7268a2 Mon Sep 17 00:00:00 2001
From: nikhilailani <nikzz1310@gmail.com>
Date: Wed, 23 Dec 2020 15:28:36 +0530
Subject: [PATCH 47/69] Create 9_BreadthFirstSearch module

---
 .vscode/settings.json                  |  5 +++++
 algorithms/9_BreadthFirstSearch/bfs.py | 25 ++++++++++++-------------
 2 files changed, 17 insertions(+), 13 deletions(-)
 create mode 100644 .vscode/settings.json

diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..5b91456
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+        "python.linting.pylintEnabled": false,
+        "python.linting.flake8Enabled": true,
+        "python.linting.enabled": true
+}
\ No newline at end of file
diff --git a/algorithms/9_BreadthFirstSearch/bfs.py b/algorithms/9_BreadthFirstSearch/bfs.py
index 137ad87..01b6a1f 100644
--- a/algorithms/9_BreadthFirstSearch/bfs.py
+++ b/algorithms/9_BreadthFirstSearch/bfs.py
@@ -1,24 +1,23 @@
 def bfs(data, start, visited=set()):
 
     queue = [start]
-    
+
     while queue:
         current_node = queue.pop(0)
-        if current_node not in visited: print(current_node, end = " ")
+        if current_node not in visited:
+            print(current_node, end=" ")
         visited.add(current_node)
-        
+
         for i in data[current_node] - visited:
             queue.append(i)
-            
     return
-        
+
+
 if __name__ == '__main__':
-    
-    data = {'A': {'B'},
-        'B': {'A', 'C', 'D'},
-        'C': {'B', 'E'},
-        'D': {'B', 'E'},
-        'E': {'C', 'D', 'F'},
-        'F': {'E'}}
-    
+
+    data = {
+        'A': {'B'}, 'B': {'A', 'C', 'D'}, 'C': {'B', 'E'}, 'D': {'B', 'E'},
+        'E': {'C', 'D', 'F'}, 'F': {'E'}
+    }
+
     bfs(data, 'A')

From 4bf2c680acfeeff43adffa2239c8054e7514d6e8 Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Thu, 24 Dec 2020 14:44:50 +0530
Subject: [PATCH 48/69] Rename Dfs_exercise.py to dfs_exercise.py

---
 .../8_depth_first_search/{Dfs_exercise.py => dfs_exercise.py}     | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename algorithms/8_depth_first_search/{Dfs_exercise.py => dfs_exercise.py} (100%)

diff --git a/algorithms/8_depth_first_search/Dfs_exercise.py b/algorithms/8_depth_first_search/dfs_exercise.py
similarity index 100%
rename from algorithms/8_depth_first_search/Dfs_exercise.py
rename to algorithms/8_depth_first_search/dfs_exercise.py

From 7dbdb25d8ba7893a7206c8ab3cb8172a65163915 Mon Sep 17 00:00:00 2001
From: Darshan beladiya <42748893+beladiyadarshan@users.noreply.github.com>
Date: Thu, 24 Dec 2020 14:45:34 +0530
Subject: [PATCH 49/69] Update and rename Dfs_Exerscise.md to dfs_exerscise.md

---
 .../{Dfs_Exerscise.md => dfs_exerscise.md}                   | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
 rename algorithms/8_depth_first_search/{Dfs_Exerscise.md => dfs_exerscise.md} (94%)

diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/dfs_exerscise.md
similarity index 94%
rename from algorithms/8_depth_first_search/Dfs_Exerscise.md
rename to algorithms/8_depth_first_search/dfs_exerscise.md
index 7f0b295..f44051b 100644
--- a/algorithms/8_depth_first_search/Dfs_Exerscise.md
+++ b/algorithms/8_depth_first_search/dfs_exerscise.md
@@ -5,13 +5,14 @@
 Given a graph in dictionary form, print all employees reporting to given employee.
 
 ```
-data = {"karan": {"darshan","nikhil"},
+data = {
+        "karan": {"darshan","nikhil"},
         "darshan": {"khantil", "tanuj"},
         'tanuj': {"nikhil"},
         "krinish": {"hetul"},
         "khantil" : set(),
         "nikhil" : set()
-        }
+ }
         
     
  ```

From 557eceb361ca9b7114c239b8fbaf85469136971d Mon Sep 17 00:00:00 2001
From: d_p_beladiya <darshan@atliq.com>
Date: Thu, 24 Dec 2020 14:50:13 +0530
Subject: [PATCH 50/69] corrected md file

---
 .vscode/settings.json                            | 5 +++++
 algorithms/8_depth_first_search/Dfs_Exerscise.md | 3 ++-
 algorithms/8_depth_first_search/dfs.py           | 6 ++++--
 3 files changed, 11 insertions(+), 3 deletions(-)
 create mode 100644 .vscode/settings.json

diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..9fadd3a
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+    "python.linting.pylintEnabled": false,
+    "python.linting.flake8Enabled": true,
+    "python.linting.enabled": true
+}
\ No newline at end of file
diff --git a/algorithms/8_depth_first_search/Dfs_Exerscise.md b/algorithms/8_depth_first_search/Dfs_Exerscise.md
index 7f0b295..9f6cdf6 100644
--- a/algorithms/8_depth_first_search/Dfs_Exerscise.md
+++ b/algorithms/8_depth_first_search/Dfs_Exerscise.md
@@ -5,7 +5,8 @@
 Given a graph in dictionary form, print all employees reporting to given employee.
 
 ```
-data = {"karan": {"darshan","nikhil"},
+data = {
+       "karan": {"darshan","nikhil"},
         "darshan": {"khantil", "tanuj"},
         'tanuj': {"nikhil"},
         "krinish": {"hetul"},
diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_depth_first_search/dfs.py
index 1671f4e..97bf329 100644
--- a/algorithms/8_depth_first_search/dfs.py
+++ b/algorithms/8_depth_first_search/dfs.py
@@ -15,12 +15,14 @@ def dfs(data, start, visited=set()):
 
 
 # sample data in dictionary form
-data = {'A': {'B'},
+data = {
+        'A': {'B'},
         'B': {'A', 'C', 'D'},
         'C': {'B', 'E'},
         'D': {'B', 'E'},
         'E': {'C', 'D', 'F'},
-        'F': {'E'}}
+        'F': {'E'}
+        }
 
 
 if __name__ == '__main__':

From 5e8bef68d715860230f451096a73ddc57f354695 Mon Sep 17 00:00:00 2001
From: Karandeep Grover <groverkds@gmail.com>
Date: Thu, 24 Dec 2020 15:06:54 +0530
Subject: [PATCH 51/69] BLD: added vscode/settings.json to gitignore

---
 .gitignore | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.gitignore b/.gitignore
index b6e4761..2d15a85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -127,3 +127,6 @@ dmypy.json
 
 # Pyre type checker
 .pyre/
+
+# Editor settings
+.vscode/settings.json
\ No newline at end of file

From a1b46fb665aa7e70b1bd94530fa2796d8b644eaf Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:07:35 +0530
Subject: [PATCH 52/69] Delete settings.json

---
 .vscode/settings.json | 5 -----
 1 file changed, 5 deletions(-)
 delete mode 100644 .vscode/settings.json

diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 9fadd3a..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "python.linting.pylintEnabled": false,
-    "python.linting.flake8Enabled": true,
-    "python.linting.enabled": true
-}
\ No newline at end of file

From 70c126e0f4d4289051b50943473fbb3796455323 Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:07:50 +0530
Subject: [PATCH 53/69] Delete settings.json

---
 .vscode/settings.json | 5 -----
 1 file changed, 5 deletions(-)
 delete mode 100644 .vscode/settings.json

diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 5b91456..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-        "python.linting.pylintEnabled": false,
-        "python.linting.flake8Enabled": true,
-        "python.linting.enabled": true
-}
\ No newline at end of file

From 074c6ca42d9bd847dd143a7c0852bbea83dc7cbf Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:08:46 +0530
Subject: [PATCH 54/69] Update dfs_exercise.py

---
 algorithms/8_depth_first_search/dfs_exercise.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/algorithms/8_depth_first_search/dfs_exercise.py b/algorithms/8_depth_first_search/dfs_exercise.py
index d6c98d4..1c287d1 100644
--- a/algorithms/8_depth_first_search/dfs_exercise.py
+++ b/algorithms/8_depth_first_search/dfs_exercise.py
@@ -17,11 +17,11 @@ def dfs(data, start, employee, visited=set()):
 data = {
     "karan": {"darshan", "nikhil"},
     "darshan": {"khantil", "tanuj"},
-    'tanuj': {"nikhil"},
+    "tanuj": {"nikhil"},
     "krinish": {"hetul"},
     "khantil": set(),
     "nikhil": set()
-    }
+}
 
 
 if __name__ == '__main__':

From 57f9f13bcc9cc2a6476dc7aaaa77c2927a6125d1 Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:11:57 +0530
Subject: [PATCH 55/69] Update dfs_exerscise.md

---
 algorithms/8_depth_first_search/dfs_exerscise.md | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/algorithms/8_depth_first_search/dfs_exerscise.md b/algorithms/8_depth_first_search/dfs_exerscise.md
index f44051b..34fa25d 100644
--- a/algorithms/8_depth_first_search/dfs_exerscise.md
+++ b/algorithms/8_depth_first_search/dfs_exerscise.md
@@ -2,13 +2,13 @@
 
 ![Overview : Employee hierarchy](https://github.com/beladiyadarshan/DFS/blob/main/emp.png?raw=true)
 
-Given a graph in dictionary form, print all employees reporting to given employee.
+Given a graph containing managers and their employees as a dictionary of sets, print all employees reporting to a given manager.
 
 ```
 data = {
         "karan": {"darshan","nikhil"},
         "darshan": {"khantil", "tanuj"},
-        'tanuj': {"nikhil"},
+        "tanuj": {"nikhil"},
         "krinish": {"hetul"},
         "khantil" : set(),
         "nikhil" : set()
@@ -17,21 +17,20 @@ data = {
     
  ```
  
- Here, Darshan and Nikhil are reporting to Karan and so on...
+ Example: Darshan and Nikhil are reporting to Karan. Khantil and Tanuj are reporting to Darshan.
  
  ```
- Q.Find all employees who are reporting to Karan
-        -perform DFS on Karan and print all the employees
+ Q. Find all employees who are reporting to Karan.
  ```
 
 **Explanation:**
 
--So here, we want to find all the children of Karan.
+-So here, we want to find all the children nodes of Karan.
 
--We will perform DFS on Karan and then traverse all the children of Karan which are unvisited. 
+-We will perform DFS starting on Karan and then traverse all the children of Karan which are unvisited. 
 
 **Output:**
 
 karan : nikhil darshan tanuj khantil 
 
-[Solution](https://github.com/beladiyadarshan/DFS/blob/main/DFS_exercise.py)
+[Solution](https://github.com/beladiyadarshan/DFS/blob/main/dfs_exercise.py)

From 1d7c3087560098a7f7bc1c5cea0efb73360361cf Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:16:26 +0530
Subject: [PATCH 56/69] Update dfs_exercise.py

---
 algorithms/8_depth_first_search/dfs_exercise.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/algorithms/8_depth_first_search/dfs_exercise.py b/algorithms/8_depth_first_search/dfs_exercise.py
index 1c287d1..310a483 100644
--- a/algorithms/8_depth_first_search/dfs_exercise.py
+++ b/algorithms/8_depth_first_search/dfs_exercise.py
@@ -1,5 +1,5 @@
 # function for depth first search
-def dfs(data, start, employee, visited=set()):
+def find_employees(data, start, employee, visited=set()):
     # if not visited print it
     if start not in visited:
         print(start, end=" ")
@@ -9,7 +9,7 @@ def dfs(data, start, employee, visited=set()):
 
     for i in data[start] - visited:
         # if not visited go in depth of it
-        dfs(data, i, visited)
+        find_employees(data, i, visited)
     return
 
 
@@ -26,4 +26,4 @@ def dfs(data, start, employee, visited=set()):
 
 if __name__ == '__main__':
 
-    dfs(data, "karan", "karan")
+    find_employees(data, "karan", "karan")

From 699382b9ccb6c85e5f26fe796d1a45b54fddf5ef Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:23:45 +0530
Subject: [PATCH 57/69] Update bfs_exercise_solution.py

---
 algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
index 51ea270..f6f3a8e 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
@@ -5,7 +5,7 @@ def bfs(data, start, end, visited=[]):
         current_node = queue.pop(0)
         if current_node==end:
             print("Path exists!")
-            print("Path : " + "->".join(visited) + "->"+end)
+            print("Path: " + "->".join(visited) + "->" + end)
             return
         visited.append(current_node)
         

From 018f909132aff5fbeb8a474bacf36b9c392cdefc Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:24:33 +0530
Subject: [PATCH 58/69] Update bfs_exercise_solution.py

---
 .../9_BreadthFirstSearch/bfs_exercise_solution.py  | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
index f6f3a8e..bb8dd9f 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
@@ -18,10 +18,12 @@ def bfs(data, start, end, visited=[]):
 
         
 if __name__ == '__main__':
-  data = {'A': {'B'},
-        'B': {'C', 'D'},
-        'C': {'E'},
-        'D': {'E'},
-        'E': {'F'},
-        'F': set()}
+  data = {
+    'A': {'B'},
+    'B': {'C', 'D'},
+    'C': {'E'},
+    'D': {'E'},
+    'E': {'F'},
+    'F': set()
+  }
   bfs(data, 'A', 'D')

From 8d9b988e9d8f3baf415a52cd16caed44b2b281e2 Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:25:31 +0530
Subject: [PATCH 59/69] Update bfs_exercise_solution.py

---
 algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
index bb8dd9f..9de0d32 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
@@ -1,6 +1,6 @@
 def bfs(data, start, end, visited=[]):
     queue = [start]
-    
+
     while queue:
         current_node = queue.pop(0)
         if current_node==end:
@@ -8,15 +8,13 @@ def bfs(data, start, end, visited=[]):
             print("Path: " + "->".join(visited) + "->" + end)
             return
         visited.append(current_node)
-        
+
         for i in data[current_node] - set(visited):
             queue.append(i)
     print("Path does not exist!")    
     return
-        
-        
 
-        
+
 if __name__ == '__main__':
   data = {
     'A': {'B'},

From 080306a92dcf7e7fea99da67e4b70276d70bc01d Mon Sep 17 00:00:00 2001
From: Nikhil Ailani <46107121+nikhilailani@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:32:16 +0530
Subject: [PATCH 60/69] Update bfs_exercise.md

---
 algorithms/9_BreadthFirstSearch/bfs_exercise.md | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
index 9384e8a..16fabbb 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise.md
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -9,12 +9,14 @@ Example: A, B, C, D, E, F are the nodes of the graph.
 For example, you are given following data: 
 
 ```
-data = {'A': {'B'},
+data = {
+        'A': {'B'},
         'B': {'A', 'C', 'D'},
         'C': {'B', 'E'},
         'D': {'B', 'E'},
         'E': {'C', 'D', 'F'},
-        'F': {'E'}}
+        'F': {'E'}
+}
 ```
 
 the resultant graph will be :-

From 24c469c95e1df4d8f2c270983703c0f075ab9609 Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:42:17 +0530
Subject: [PATCH 61/69] Update bfs_exercise.md

---
 algorithms/9_BreadthFirstSearch/bfs_exercise.md | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
index 16fabbb..bbca067 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise.md
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -1,7 +1,7 @@
 # BFS_Traversal
 BFS Traversal of a graph in python using graph given in dictionary
 
-Implement a program to find whether a path exists for an airline route or not. The routes are described using graph having nodes. The names of the graphs are named alphabet characters for easy understanding. Print the path if it exists; print the denying statement if it doesn't!
+Implement a function to find whether a path exists for a given set of airline routes. The routes are depicted using graphs as a dictionary of sets, where keys represent as source and elements of sets represent destinations. Print the path if it exists.
 
 Example: A, B, C, D, E, F are the nodes of the graph.
 
@@ -23,14 +23,12 @@ the resultant graph will be :-
 
 ![alt text](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png)
 
+Example: Source is A, Destination is D.
 
-**Explanation:** Here, selecting A as source node and D as destination node, the values are passed to the function.
+Expected Output:
 
-Your output should look like this:
-
-'''
-Path exists!
+```
 Path : A->B->D
-'''
+```
 
 [Solution](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py)

From c95f88c07803e88adcd8d532c5e2e495655ba712 Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:42:47 +0530
Subject: [PATCH 62/69] Update bfs_exercise_solution.py

---
 algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
index 9de0d32..46f6b41 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise_solution.py
@@ -4,7 +4,6 @@ def bfs(data, start, end, visited=[]):
     while queue:
         current_node = queue.pop(0)
         if current_node==end:
-            print("Path exists!")
             print("Path: " + "->".join(visited) + "->" + end)
             return
         visited.append(current_node)

From 9e9315586717668be93f7bb0fb202401bcaf62c9 Mon Sep 17 00:00:00 2001
From: Karandeep Singh Grover <30365139+groverkds@users.noreply.github.com>
Date: Thu, 24 Dec 2020 15:45:34 +0530
Subject: [PATCH 63/69] Update bfs_exercise.md

---
 algorithms/9_BreadthFirstSearch/bfs_exercise.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/algorithms/9_BreadthFirstSearch/bfs_exercise.md b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
index bbca067..09ac2ab 100644
--- a/algorithms/9_BreadthFirstSearch/bfs_exercise.md
+++ b/algorithms/9_BreadthFirstSearch/bfs_exercise.md
@@ -6,7 +6,7 @@ Implement a function to find whether a path exists for a given set of airline ro
 Example: A, B, C, D, E, F are the nodes of the graph.
 
 
-For example, you are given following data: 
+For example, if you are given following data: 
 
 ```
 data = {
@@ -19,7 +19,7 @@ data = {
 }
 ```
 
-the resultant graph will be :-
+The resultant graph will be:
 
 ![alt text](https://github.com/nikhilailani/data-structures-algorithms-python/blob/master/algorithms/9_BreadthFirstSearch/DFS_BFS_Graph.png)
 

From cdf5bbc2ca64b62f25a82ceafb2dd73da2fa0155 Mon Sep 17 00:00:00 2001
From: Karandeep Grover <groverkds@gmail.com>
Date: Thu, 24 Dec 2020 17:46:59 +0530
Subject: [PATCH 64/69] CLN: renamed the folder to follow the directory
 convention

---
 .../dfs.py                                          |   0
 .../dfs_exercise.py                                 |   0
 .../dfs_exerscise.md                                |   0
 .../emp.png                                         | Bin
 .../updated_graph.jpg                               | Bin
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename algorithms/{8_depth_first_search => 8_DepthFirstSearch}/dfs.py (100%)
 rename algorithms/{8_depth_first_search => 8_DepthFirstSearch}/dfs_exercise.py (100%)
 rename algorithms/{8_depth_first_search => 8_DepthFirstSearch}/dfs_exerscise.md (100%)
 rename algorithms/{8_depth_first_search => 8_DepthFirstSearch}/emp.png (100%)
 rename algorithms/{8_depth_first_search => 8_DepthFirstSearch}/updated_graph.jpg (100%)

diff --git a/algorithms/8_depth_first_search/dfs.py b/algorithms/8_DepthFirstSearch/dfs.py
similarity index 100%
rename from algorithms/8_depth_first_search/dfs.py
rename to algorithms/8_DepthFirstSearch/dfs.py
diff --git a/algorithms/8_depth_first_search/dfs_exercise.py b/algorithms/8_DepthFirstSearch/dfs_exercise.py
similarity index 100%
rename from algorithms/8_depth_first_search/dfs_exercise.py
rename to algorithms/8_DepthFirstSearch/dfs_exercise.py
diff --git a/algorithms/8_depth_first_search/dfs_exerscise.md b/algorithms/8_DepthFirstSearch/dfs_exerscise.md
similarity index 100%
rename from algorithms/8_depth_first_search/dfs_exerscise.md
rename to algorithms/8_DepthFirstSearch/dfs_exerscise.md
diff --git a/algorithms/8_depth_first_search/emp.png b/algorithms/8_DepthFirstSearch/emp.png
similarity index 100%
rename from algorithms/8_depth_first_search/emp.png
rename to algorithms/8_DepthFirstSearch/emp.png
diff --git a/algorithms/8_depth_first_search/updated_graph.jpg b/algorithms/8_DepthFirstSearch/updated_graph.jpg
similarity index 100%
rename from algorithms/8_depth_first_search/updated_graph.jpg
rename to algorithms/8_DepthFirstSearch/updated_graph.jpg

From be9fe697fe46e4be29f94ca3b7d19be0b890d905 Mon Sep 17 00:00:00 2001
From: Karandeep Grover <groverkds@gmail.com>
Date: Tue, 26 Jan 2021 10:12:03 +0530
Subject: [PATCH 65/69] updated links which were not working

---
 .../1_BinarySearch/binary_search_exercise.md       |  2 +-
 algorithms/2_BubbleSort/bubble_sort_exercise.md    |  4 ++--
 algorithms/3_QuickSort/quick_sort_exercise.md      |  2 +-
 data_structures/2_Arrays/2_arrays_exercise.md      |  6 +++---
 .../3_LinkedList/3_linked_list_exercise.md         |  8 ++++----
 .../4_hash_table_exercise.md                       | 14 +++++++-------
 data_structures/6_Queue/6_queue_exercise.md        |  2 +-
 data_structures/7_Tree/7_tree_exercise.md          |  6 +++---
 8 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/algorithms/1_BinarySearch/binary_search_exercise.md b/algorithms/1_BinarySearch/binary_search_exercise.md
index fbec387..fea2b2b 100644
--- a/algorithms/1_BinarySearch/binary_search_exercise.md
+++ b/algorithms/1_BinarySearch/binary_search_exercise.md
@@ -11,4 +11,4 @@
     ```
    This should return 5,6,7 as indices containing number 15 in the array
     
-[Solution](https://github.com/codebasics/py/blob/master/Algorithms/1_BinarySearch/binary_search_exercise_solution.py)    
\ No newline at end of file
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/1_BinarySearch/binary_search_exercise_solution.py)    
\ No newline at end of file
diff --git a/algorithms/2_BubbleSort/bubble_sort_exercise.md b/algorithms/2_BubbleSort/bubble_sort_exercise.md
index b507c16..5068b08 100644
--- a/algorithms/2_BubbleSort/bubble_sort_exercise.md
+++ b/algorithms/2_BubbleSort/bubble_sort_exercise.md
@@ -1,6 +1,6 @@
 ### Bubble Sort Exercise
 
-Modify [bubble_sort function](https://github.com/codebasics/py/blob/master/Algorithms/2_BubbleSort/bubble_sort.py) such that it can sort following list of transactions happening in an electronic store,
+Modify [bubble_sort function](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/2_BubbleSort/bubble_sort.py) such that it can sort following list of transactions happening in an electronic store,
 ```
 elements = [
         { 'name': 'mona',   'transaction_amount': 1000, 'device': 'iphone-10'},
@@ -36,5 +36,5 @@ elements = [
     ]
 ``` 
 
-[Solution](https://github.com/codebasics/py/blob/master/Algorithms/2_BubbleSort/bubble_sort_exercise_solution.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithmsAlgorithms/2_BubbleSort/bubble_sort_exercise_solution.py)
 
diff --git a/algorithms/3_QuickSort/quick_sort_exercise.md b/algorithms/3_QuickSort/quick_sort_exercise.md
index 82e7bfa..0edb19d 100644
--- a/algorithms/3_QuickSort/quick_sort_exercise.md
+++ b/algorithms/3_QuickSort/quick_sort_exercise.md
@@ -2,7 +2,7 @@
 Implement quick sort using lumoto partition scheme. This partition scheme is explained in the video tutorial, you need to write python code to implement it.
 Check the pseudo code here: https://en.wikipedia.org/wiki/Quicksort Check the section Lomuto partition scheme
  
- [Solution](https://github.com/codebasics/py/blob/master/Algorithms/3_QuickSort/quick_sort_exercise_soluiton_lomuto.py)
+ [Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/3_QuickSort/quick_sort_exercise_soluiton_lomuto.py)
 
 
  
\ No newline at end of file
diff --git a/data_structures/2_Arrays/2_arrays_exercise.md b/data_structures/2_Arrays/2_arrays_exercise.md
index 5713d35..81d65f4 100644
--- a/data_structures/2_Arrays/2_arrays_exercise.md
+++ b/data_structures/2_Arrays/2_arrays_exercise.md
@@ -17,7 +17,7 @@ Create a list to store these monthly expenses and using that find out,
     got a refund of 200$. Make a correction to your monthly expense list
     based on this
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/2_Arrays/Solution/1_expenses.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/2_Arrays/Solution/1_expenses.py)
 
 2. You have a list of your favourite marvel super heros.
 ```
@@ -35,11 +35,11 @@ Using this find out,
        Do that with one line of code.
     5. Sort the heros list in alphabetical order (Hint. Use dir() functions to list down all functions available in list)
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/2_Arrays/Solution/2_marvel.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/2_Arrays/Solution/2_marvel.py)
 
 
 3. Create a list of all odd numbers between 1 and a max number.
 Max number is something you need to take from a user using input() function
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/2_Arrays/Solution/3_odd_even_numbers.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/2_Arrays/Solution/3_odd_even_numbers.py)
 
diff --git a/data_structures/3_LinkedList/3_linked_list_exercise.md b/data_structures/3_LinkedList/3_linked_list_exercise.md
index e1245e8..b2cea35 100644
--- a/data_structures/3_LinkedList/3_linked_list_exercise.md
+++ b/data_structures/3_LinkedList/3_linked_list_exercise.md
@@ -1,6 +1,6 @@
 # Exercise: Linked List
 
-1. In [LinkedList class](https://github.com/codebasics/py/blob/master/DataStructures/3_LinkedList/3_linked_list.py) that we implemented in our tutorial add following two methods,
+1. In [LinkedList class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/3_LinkedList/3_linked_list.py) that we implemented in our tutorial add following two methods,
 ```
 def insert_after_value(self, data_after, data_to_insert):
     # Search for first occurance of data_after value in linked list
@@ -26,7 +26,7 @@ Now make following calls,
     ll.remove_by_value("grapes")
     ll.print()
 ```
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/3_LinkedList/Solution/singly_linked_list_exercise.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/3_LinkedList/Solution/singly_linked_list_exercise.py)
 
 2. Implement doubly linked list. The only difference with regular linked list is that double linked has prev node reference as well. That way you can iterate in forward and backward direction.
 Your node class will look this this,
@@ -45,6 +45,6 @@ def print_forward(self):
 def print_backward(self):
     # Print linked list in reverse direction. Use node.prev for this.
 ```
-Implement all other methods in [regular linked list class](https://github.com/codebasics/py/blob/master/DataStructures/3_LinkedList/3_linked_list.py) and make necessary changes for doubly linked list (you need to populate node.prev in all those methods)
+Implement all other methods in [regular linked list class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/3_LinkedList/3_linked_list.py) and make necessary changes for doubly linked list (you need to populate node.prev in all those methods)
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/3_LinkedList/Solution/doubly_linked_list_exercise.py)
\ No newline at end of file
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/3_LinkedList/Solution/doubly_linked_list_exercise.py)
\ No newline at end of file
diff --git a/data_structures/4_HashTable_2_Collisions/4_hash_table_exercise.md b/data_structures/4_HashTable_2_Collisions/4_hash_table_exercise.md
index 2ae3acf..84849b4 100644
--- a/data_structures/4_HashTable_2_Collisions/4_hash_table_exercise.md
+++ b/data_structures/4_HashTable_2_Collisions/4_hash_table_exercise.md
@@ -1,31 +1,31 @@
 # Exercise: Hash Table
 
-1. [nyc_weather.csv](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/nyc_weather.csv) contains new york city weather for first few days in the month of January. Write a program that can answer following,
+1. [nyc_weather.csv](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/nyc_weather.csv) contains new york city weather for first few days in the month of January. Write a program that can answer following,
     1. What was the average temperature in first week of Jan
     1. What was the maximum temperature in first 10 days of Jan
 
 Figure out data structure that is best for this problem
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/weather_analysis.ipynb)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/weather_analysis.ipynb)
 
-2. [nyc_weather.csv](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/nyc_weather.csv) contains new york city weather for first few days in the month of January. Write a program that can answer following,
+2. [nyc_weather.csv](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/nyc_weather.csv) contains new york city weather for first few days in the month of January. Write a program that can answer following,
     1. What was the temperature on Jan 9?
     1. What was the temperature on Jan 4?
 
 Figure out data structure that is best for this problem
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/weather_analysis.ipynb)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/weather_analysis.ipynb)
 
-3. [poem.txt](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/poem.txt) Contains famous poem "Road not taken" by poet Robert Frost. You have to read this file in python and print every word and its count as show below. Think about the best data structure that you can use to solve this problem and figure out why you selected that specific data structure.
+3. [poem.txt](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/poem.txt) Contains famous poem "Road not taken" by poet Robert Frost. You have to read this file in python and print every word and its count as show below. Think about the best data structure that you can use to solve this problem and figure out why you selected that specific data structure.
 ```
  'diverged': 2,
  'in': 3,
  'I': 8
 ```
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/exercise_poem_find_word_occurances.ipynb)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/exercise_poem_find_word_occurances.ipynb)
 
 4. Implement hash table where collisions are handled using linear probing. We learnt about linear probing in the video tutorial. Take the hash table implementation that uses chaining and modify methods to use **linear probing**. Keep MAX size of arr in hashtable as 10.
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/4_HashTable_2_Collisions/Solution/exercise_hash_table_linear_probing.ipynb)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/4_HashTable_2_Collisions/Solution/exercise_hash_table_linear_probing.ipynb)
 
diff --git a/data_structures/6_Queue/6_queue_exercise.md b/data_structures/6_Queue/6_queue_exercise.md
index 0106930..618f9e0 100644
--- a/data_structures/6_Queue/6_queue_exercise.md
+++ b/data_structures/6_Queue/6_queue_exercise.md
@@ -1,6 +1,6 @@
 ## Data structure tutorial exercise: Queue
 
-For all exercises use [Queue class](https://github.com/codebasics/py/blob/master/DataStructures/6_Queue/6_queue.ipynb) implemented in main tutorial.
+For all exercises use [Queue class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/6_Queue/6_queue.ipynb) implemented in main tutorial.
 
 1. Design a food ordering system where your python program will run two threads,
     1. Place Order: This thread will be placing an order and inserting that into a queue. This thread places new order every 0.5 second. (hint: use time.sleep(0.5) function)
diff --git a/data_structures/7_Tree/7_tree_exercise.md b/data_structures/7_Tree/7_tree_exercise.md
index b03faa9..8c00808 100644
--- a/data_structures/7_Tree/7_tree_exercise.md
+++ b/data_structures/7_Tree/7_tree_exercise.md
@@ -4,7 +4,7 @@
 
     ![ss](management_both.PNG)
 
-Extent [tree class](https://github.com/codebasics/py/blob/master/DataStructures/7_Tree/7_tree.py) built in our
+Extent [tree class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/7_Tree/7_tree.py) built in our
 main tutorial so that it takes **name** and **designation** in data part of TreeNode class.
 Now extend print_tree function such that it can print either name tree, designation tree or name and designation tree. As shown below,
 
@@ -19,7 +19,7 @@ if __name__ == '__main__':
     root_node.print_tree("both") # prints both (name and designation) hierarchy
 ```
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/7_Tree/Exercise/management_hierarchy.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/7_Tree/Exercise/management_hierarchy.py)
 
 2. Build below location tree using **TreeNode** class
 
@@ -29,6 +29,6 @@ Now modify print_tree method to take tree level as input. And that should print
 
    ![](location_trees_all.png)
 
-[Solution](https://github.com/codebasics/py/blob/master/DataStructures/7_Tree/Exercise/location_hierarchy.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/7_Tree/Exercise/location_hierarchy.py)
 
 

From 4d8a294ddf4dade0bc2bf48af7be401f7014c2ff Mon Sep 17 00:00:00 2001
From: Karandeep Grover <groverkds@gmail.com>
Date: Tue, 26 Jan 2021 10:14:11 +0530
Subject: [PATCH 66/69] updated not working links

---
 data_structures/5_Stack/5_stack_exercise.md               | 8 ++++----
 data_structures/6_Queue/6_queue_exercise.md               | 4 ++--
 .../8_Binary_Tree_1/8_binary_tree_part_1_exercise.md      | 4 ++--
 .../9_Binary_Tree_2/9_binary_tree_part_2_exercise.md      | 4 ++--
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/data_structures/5_Stack/5_stack_exercise.md b/data_structures/5_Stack/5_stack_exercise.md
index 7724753..a91a62a 100644
--- a/data_structures/5_Stack/5_stack_exercise.md
+++ b/data_structures/5_Stack/5_stack_exercise.md
@@ -1,12 +1,12 @@
 ## Data structure tutorial exercise: Stack
-1. Write a function in python that can reverse a string using stack data structure. Use [Stack class](https://github.com/codebasics/py/tree/master/DataStructures/5_Stack/5_stack.ipynb) from the tutorial.
+1. Write a function in python that can reverse a string using stack data structure. Use [Stack class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/5_Stack/5_stack.ipynb) from the tutorial.
     ```
     reverse_string("We will conquere COVID-19") should return "91-DIVOC ereuqnoc lliw eW"
     ```
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/5_Stack/Exercise/reverse_string.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/5_Stack/Exercise/reverse_string.py)
 
-2. Write a function in python that checks if paranthesis in the string are balanced or not. Possible parantheses are "{}',"()" or "[]". Use [Stack class](https://github.com/codebasics/py/tree/master/DataStructures/5_Stack/5_stack.ipynb) from the tutorial.
+2. Write a function in python that checks if paranthesis in the string are balanced or not. Possible parantheses are "{}',"()" or "[]". Use [Stack class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/5_Stack/5_stack.ipynb) from the tutorial.
     ```
     is_balanced("({a+b})")     --> True
     is_balanced("))((a+b}{")   --> False
@@ -15,4 +15,4 @@
     is_balanced("[a+b]*(x+2y)*{gg+kk}") --> True
     ```
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/5_Stack/Exercise/balance_paran.py)
\ No newline at end of file
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/5_Stack/Exercise/balance_paran.py)
\ No newline at end of file
diff --git a/data_structures/6_Queue/6_queue_exercise.md b/data_structures/6_Queue/6_queue_exercise.md
index 618f9e0..3c3fc2d 100644
--- a/data_structures/6_Queue/6_queue_exercise.md
+++ b/data_structures/6_Queue/6_queue_exercise.md
@@ -15,7 +15,7 @@ For all exercises use [Queue class](https://github.com/codebasics/data-structure
     This problem is a producer,consumer problem where place_order thread is producing orders whereas server_order thread is consuming the food orders.
     Use Queue class implemented in a video tutorial.
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/6_Queue/Exercise/food_ordering_system.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/6_Queue/Exercise/food_ordering_system.py)
 
 2. Write a program to print binary numbers from 1 to 10 using Queue. Use Queue class implemented in main tutorial.
 Binary sequence should look like,
@@ -35,4 +35,4 @@ Hint: Notice a pattern above. After 1 second and third number is 1+0 and 1+1. 4t
 
 You also need to add front() function in queue class that can return the front element in the queue.
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/6_Queue/Exercise/binary_numbers.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/6_Queue/Exercise/binary_numbers.py)
diff --git a/data_structures/8_Binary_Tree_1/8_binary_tree_part_1_exercise.md b/data_structures/8_Binary_Tree_1/8_binary_tree_part_1_exercise.md
index 5e11b62..d050129 100644
--- a/data_structures/8_Binary_Tree_1/8_binary_tree_part_1_exercise.md
+++ b/data_structures/8_Binary_Tree_1/8_binary_tree_part_1_exercise.md
@@ -1,6 +1,6 @@
 ### Binary Tree Part 1 Exercise
 
-Add following methods to [BinarySearchTreeNode class](https://github.com/codebasics/py/tree/master/DataStructures/8_Binary_Tree_1/binary_tree_part_1.py) created in main video tutorial
+Add following methods to [BinarySearchTreeNode class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/8_Binary_Tree_1/binary_tree_part_1.py) created in main video tutorial
 
     1. find_min(): finds minimum element in entire binary tree
     2. find_max(): finds maximum element in entire binary tree
@@ -8,5 +8,5 @@ Add following methods to [BinarySearchTreeNode class](https://github.com/codebas
     4. post_order_traversal(): performs post order traversal of a binary tree
     5. pre_order_traversal(): perofrms pre order traversal of a binary tree
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/8_Binary_Tree_1/Exercise/binary_tree_part_1_exercise.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/8_Binary_Tree_1/Exercise/binary_tree_part_1_exercise.py)
 
diff --git a/data_structures/9_Binary_Tree_2/9_binary_tree_part_2_exercise.md b/data_structures/9_Binary_Tree_2/9_binary_tree_part_2_exercise.md
index 6d83725..95cb303 100644
--- a/data_structures/9_Binary_Tree_2/9_binary_tree_part_2_exercise.md
+++ b/data_structures/9_Binary_Tree_2/9_binary_tree_part_2_exercise.md
@@ -1,6 +1,6 @@
 ### Binary Tree Part 2 Exercise
 
-Modify delete method in class [BinarySearchTreeNode class](https://github.com/codebasics/py/tree/master/DataStructures/9_Binary_Tree_2/binary_tree_part_2.py)
+Modify delete method in class [BinarySearchTreeNode class](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/9_Binary_Tree_2/binary_tree_part_2.py)
 to use min element from left subtree. You will remove lines marked with ---> and use max value from left subtree
 
 ```
@@ -24,5 +24,5 @@ to use min element from left subtree. You will remove lines marked with ---> and
           --->  self.right = self.right.delete(min_val)
 ```
 
-[Solution](https://github.com/codebasics/py/tree/master/DataStructures/9_Binary_Tree_2/Exercise/binary_tree_part_2_exercise.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/data_structures/9_Binary_Tree_2/Exercise/binary_tree_part_2_exercise.py)
 

From 3174849813e2d5851b75aab564fc57ab566ce6fa Mon Sep 17 00:00:00 2001
From: codebasics <learnpythonlanguage@gmail.com>
Date: Tue, 9 Feb 2021 19:23:02 -0500
Subject: [PATCH 67/69] recursion

---
 algorithms/8_recursion/recursion.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 algorithms/8_recursion/recursion.py

diff --git a/algorithms/8_recursion/recursion.py b/algorithms/8_recursion/recursion.py
new file mode 100644
index 0000000..a903e1f
--- /dev/null
+++ b/algorithms/8_recursion/recursion.py
@@ -0,0 +1,16 @@
+def find_sum(n):
+    if n==1:
+        return 1
+    return n + find_sum(n-1)
+
+def fib(n):
+    # 0,1,1,2,3,5,8 <-- fibonacci numbers
+    # --------------
+    # 0,1,2,3,4,5,6 <-- index
+    if n==0 or n==1:
+        return n
+    return fib(n-1) + fib(n-2)
+
+if __name__=='__main__':
+    print(find_sum(5))
+    print(fib(10))
\ No newline at end of file

From fd97ca9e7377af65b2c6e7edbbe60f287b85d047 Mon Sep 17 00:00:00 2001
From: Aravinth <aravinthaamec11@gmail.com>
Date: Thu, 8 Jul 2021 19:12:09 +0530
Subject: [PATCH 68/69] range updated to get odd numbers between 1 and max
 number

---
 data_structures/2_Arrays/Solution/3_odd_even_numbers.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/data_structures/2_Arrays/Solution/3_odd_even_numbers.py b/data_structures/2_Arrays/Solution/3_odd_even_numbers.py
index 334b53c..ec1c4b7 100644
--- a/data_structures/2_Arrays/Solution/3_odd_even_numbers.py
+++ b/data_structures/2_Arrays/Solution/3_odd_even_numbers.py
@@ -2,8 +2,8 @@
 
 odd_numbers = []
 
-for i in range(max):
-    if i%2 == 1:
+for i in range(1, max):
+    if i % 2 == 1:
         odd_numbers.append(i)
 
-print("Odd numbers: ",odd_numbers)
+print("Odd numbers: ", odd_numbers)

From 7d353b83e3498a0c1ec58ab184045b0b94f3a68b Mon Sep 17 00:00:00 2001
From: Dhaval Patel <60363945+dhavalsays@users.noreply.github.com>
Date: Sun, 13 Nov 2022 19:23:15 -0500
Subject: [PATCH 69/69] Update bubble_sort_exercise.md

---
 algorithms/2_BubbleSort/bubble_sort_exercise.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/algorithms/2_BubbleSort/bubble_sort_exercise.md b/algorithms/2_BubbleSort/bubble_sort_exercise.md
index 5068b08..e930890 100644
--- a/algorithms/2_BubbleSort/bubble_sort_exercise.md
+++ b/algorithms/2_BubbleSort/bubble_sort_exercise.md
@@ -36,5 +36,5 @@ elements = [
     ]
 ``` 
 
-[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithmsAlgorithms/2_BubbleSort/bubble_sort_exercise_solution.py)
+[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/2_BubbleSort/bubble_sort_exercise_solution.py)