Skip to content

Commit 8cf2bb6

Browse files
authored
Sorting Algorithms
Contains some of the most popular sorting algorithms
1 parent b7b4fa7 commit 8cf2bb6

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

sorting_algos.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
'''Contains some of the Major Sorting Algorithm'''
2+
3+
def selection_sort(arr : list) -> list:
4+
'''TC : O(n^2)
5+
SC : O(1)'''
6+
n = len(arr)
7+
for i in range( n):
8+
for j in range(i+1 , n):
9+
if arr[i] > arr[j]:
10+
arr[i] , arr[j] = arr[j] , arr[i]
11+
return arr
12+
13+
def bubble_sort(arr : list) -> list:
14+
'''TC : O(n^2)
15+
SC : O(1)'''
16+
n = len(arr)
17+
flag = True
18+
while flag:
19+
flag = False
20+
for i in range(1 , n):
21+
if arr[i-1] > arr[i]:
22+
flag = True
23+
arr[i-1] , arr[i] = arr[i] , arr[i-1]
24+
return arr
25+
26+
def insertion_sort(arr : list) -> list:
27+
'''TC : O(n^2)
28+
SC : O(1)'''
29+
n = len(arr)
30+
for i in range(1, n):
31+
for j in range(i , 0 , -1):
32+
if arr[j-1] > arr[j]:
33+
arr[j-1] , arr[j] = arr[j] , arr[j-1]
34+
else :
35+
break
36+
return arr
37+
38+
def merge_sort(arr : list) -> list:
39+
'''TC : O(nlogn)
40+
SC : O(n) for this version ... But SC can be reduced to O(1)'''
41+
n = len(arr)
42+
if n == 1: return arr
43+
44+
m = len(arr) // 2
45+
L = arr[:m]
46+
R = arr[m:]
47+
L = merge_sort(L)
48+
R = merge_sort(R)
49+
l = r = 0
50+
51+
sorted_arr = [0] * n
52+
i = 0
53+
54+
while l < len(L) and r < len(R):
55+
if L[l] < R[r]:
56+
sorted_arr[i] = L[l]
57+
l += 1
58+
else :
59+
sorted_arr[i] = R[r]
60+
r += 1
61+
i += 1
62+
63+
while l < len(L):
64+
sorted_arr[i] = L[l]
65+
l += 1
66+
i += 1
67+
68+
while r < len(R):
69+
sorted_arr[i] = R[r]
70+
r += 1
71+
i += 1
72+
73+
return arr
74+
75+
def quick_sort(arr : list) -> list:
76+
'''TC : O(nlogn) (TC can be n^2 for SUUUper worst case i.e. If the Pivot is continuously bad)
77+
SC : O(n) for this version ... But SC can be reduced to O(logn)'''
78+
79+
if len(arr) <= 1: return arr
80+
81+
piv = arr[-1]
82+
L = [x for x in arr[:-1] if x <= piv]
83+
R = [x for x in arr[:-1] if x > piv]
84+
85+
L , R = quick_sort(L) , quick_sort(L)
86+
87+
return L + [piv] + R
88+
89+
def counting_sort(arr : list) -> list:
90+
'''This Works only for Positive int's(+ve), but can be modified for Negative's also
91+
92+
TC : O(n)
93+
SC : O(n)'''
94+
n = len(arr)
95+
maxx = max(arr)
96+
counts = [0] * (maxx + 1)
97+
for x in arr:
98+
counts[x] += 1
99+
100+
i = 0
101+
for c in range(maxx + 1):
102+
while counts[c] > 0:
103+
arr[i] = c
104+
i += 1
105+
counts[c] -= 1
106+
return arr
107+
108+
def main():
109+
algos = {'selection_sort' : ['TC : O(n^2)','SC : O(1)'],
110+
'bubble_sort' : ['TC : O(n^2)','SC : O(1)'],
111+
'insertion_sort' : ['TC : O(n^2)','SC : O(1)'],
112+
'merge_sort' : ['TC : O(n^2)','SC : O(1)'],
113+
'quick_sort' : ['TC : O(n^2)','SC : O(1)'],
114+
'counting_sort' : ['TC : O(n^2)','SC : O(1)'],}
115+
116+
inp = [1 , 2 ,7 , -8 , 34 , 2 , 80 , 790 , 6]
117+
arr = counting_sort(inp)
118+
print('U are amazing, Keep up')
119+
120+
if __name__ == '__main__':
121+
main()

0 commit comments

Comments
 (0)