Skip to content

Commit 92a582e

Browse files
authored
Merge pull request larymak#109 from karthiks2611/main
Added implementation of Data Structures and Algorithms
2 parents 8cfc846 + e025a9f commit 92a582e

File tree

5 files changed

+146
-1
lines changed

5 files changed

+146
-1
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
def BubbleSort(array):
3+
4+
# Loop to access each array element
5+
for i in range(len(array)):
6+
for j in range(0,len(array)-1-i):
7+
# Replace > with < for descending order
8+
if array[j] > array[j+1]:
9+
10+
# Swapping elements if elements are not in the intended order
11+
temp = array[j]
12+
array[j] = array[j+1]
13+
array[j+1] = temp
14+
return array
15+
16+
17+
# Driver code
18+
if __name__ == '__main__':
19+
Array = [-1,9,21,34,1,5,6,8,10,23,25,27,31]
20+
print("Array before sorting: ", Array)
21+
print("Array after sorting: ", BubbleSort(Array))
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
def Heapify(Array, n, i):
3+
# Find largest among root and children
4+
largest = i
5+
l = 2 * i + 1
6+
r = 2 * i + 2
7+
8+
if l < n and Array[l] > Array[largest]:
9+
largest = l
10+
11+
if r < n and Array[r] > Array[largest]:
12+
largest = r
13+
14+
# If root is not largest, swap with largest and continue heapifying
15+
if largest != i:
16+
Array[i], Array[largest] = Array[largest], Array[i]
17+
Heapify(Array, n, largest)
18+
19+
20+
def HeapSort(Array):
21+
n = len(Array)
22+
23+
# Build a max heap
24+
for i in range(n//2, -1, -1):
25+
Heapify(Array, n, i)
26+
27+
# One by one extract elements
28+
for i in range(n-1, 0, -1):
29+
# Swap
30+
Array[i], Array[0] = Array[0], Array[i]
31+
32+
# Heapify root element
33+
Heapify(Array, i, 0)
34+
35+
36+
if __name__ == "__main__":
37+
Array = [-2, -3, -1, 11, 9, 12, 4, -5, -12, 6, 19, 20]
38+
HeapSort(Array)
39+
n = len(Array)
40+
print("Sorted array is")
41+
for i in range(n):
42+
print("%d " % Array[i], end='')
43+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
def insertionSort(Array):
3+
for i in range(1, len(Array)):
4+
key = Array[i]
5+
j = i - 1
6+
7+
# Compare key with each element on the left of it until an element
8+
# smaller than it is found
9+
# For descending order, change key<Array[j] to key>Array[j].
10+
while j >= 0 and key < Array[j]:
11+
Array[j + 1] = Array[j]
12+
j -= 1
13+
Array[j + 1] = key
14+
return Array
15+
16+
if __name__ == '__main__':
17+
Array = [-2, -3, -1, 11, 9, 12, 4, -5, -12, 6, 19, 20]
18+
print(insertionSort(Array))

Data Structures and Algorithms/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818

1919
- Merge Sort
2020

21+
- Bubble Sort
22+
23+
- Heap Sort
24+
25+
- Insertion Sort
26+
2127
- Quick Sort (for numbers)
2228

2329
- Quick Sort (for strings)
@@ -26,4 +32,6 @@
2632

2733
- Recursive Binary Search
2834

29-
- Selection Sort
35+
- Selection Sort
36+
37+
- Binary Tree traversal
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Binary tree implementation along with tree traversals
2+
3+
class Node:
4+
def __init__(self, data):
5+
self.data = data
6+
self.left = None
7+
self.right = None
8+
9+
# Traverse pre-order
10+
def traversePreOrder(self):
11+
print(self.data, end=" ")
12+
if self.left:
13+
self.left.traversePreOrder()
14+
if self.right:
15+
self.right.traversePreOrder()
16+
17+
18+
# Traverse in-order
19+
def traverseInOrder(self):
20+
if self.left:
21+
self.left.traverseInOrder()
22+
print(self.data, end=" ")
23+
if self.right:
24+
self.right.traverseInOrder()
25+
26+
27+
# Traverse post-order
28+
def traversePostOrder(self):
29+
if self.left:
30+
self.left.traversePostOrder()
31+
if self.right:
32+
self.right.traversePostOrder()
33+
print(self.data, end=" ")
34+
35+
36+
root = Node(1)
37+
38+
root.left = Node(2)
39+
root.right = Node(3)
40+
root.left.left = Node(4)
41+
root.left.right = Node(5)
42+
root.right.left = Node(6)
43+
root.right.right = Node(7)
44+
root.left.left.left = Node(8)
45+
root.left.left.right = Node(9)
46+
47+
print("Pre Order traversal: ", end=" ")
48+
root.traversePreOrder()
49+
print()
50+
print("Post Order traversal: ",end=" ")
51+
root.traversePostOrder()
52+
print()
53+
print("In Order traversal: ",end=" ")
54+
root.traverseInOrder()
55+
print()

0 commit comments

Comments
 (0)