Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fb354d1

Browse files
added insertion, bubble, heap, merge sort
1 parent e7111f8 commit fb354d1

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

‎Utils/sort.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import random
2+
import heapq
3+
4+
# insertion sort
5+
6+
7+
def insertionSort(arr):
8+
for i in range(1, len(arr)):
9+
print("Run {0}:".format(i))
10+
print(arr)
11+
for j in range(i):
12+
if arr[i-j] < arr[i-j-1]:
13+
arr[i-j], arr[i-j-1] = arr[i-j-1], arr[i-j]
14+
print(arr)
15+
16+
# bubble sort
17+
18+
19+
def bubbleSort(arr):
20+
for i in range(len(arr)-1):
21+
print("Run {0}:".format(i+1))
22+
for j in range(len(arr)-1):
23+
if arr[j] > arr[j+1]:
24+
arr[j], arr[j+1] = arr[j+1], arr[j]
25+
print(arr)
26+
27+
# heap sort
28+
29+
30+
def heapSort(arr):
31+
heap = list(arr)
32+
heapq.heapify(heap)
33+
print("Heapified Array:", heap)
34+
arr.clear()
35+
while heap:
36+
arr.append(heapq.heappop(heap))
37+
print("Add min from heap:", arr)
38+
print("Heapified Array:", heap)
39+
40+
41+
# merge sort
42+
43+
def mergeSort(arr):
44+
# helper recursion to divide into subproblems
45+
def divideAndConquer(arr, left=0, right=None):
46+
if right is None:
47+
right = len(arr)-1
48+
if left >= right:
49+
return
50+
mid = (left+right) // 2
51+
divideAndConquer(arr, left, mid)
52+
divideAndConquer(arr, mid+1, right)
53+
merge(arr, left, mid, right)
54+
55+
# merge subproblems and compare as merging
56+
def merge(arr, left, mid, right):
57+
tempArray = [None]*(len(arr))
58+
left1 = left
59+
right1 = mid
60+
left2 = mid+1
61+
right2 = right
62+
temp_index = left
63+
while left1 <= right1 and left2 <= right2:
64+
if arr[left1] <= arr[left2]:
65+
tempArray[temp_index] = arr[left1]
66+
left1 += 1
67+
else:
68+
tempArray[temp_index] = arr[left2]
69+
left2 += 1
70+
temp_index += 1
71+
while left1 <= right1:
72+
tempArray[temp_index] = arr[left1]
73+
left1 += 1
74+
temp_index += 1
75+
while left2 <= right2:
76+
tempArray[temp_index] = arr[left2]
77+
left2 += 1
78+
temp_index += 1
79+
print("Temporary Array:", tempArray)
80+
for i in range(left, right+1):
81+
arr[i] = tempArray[i]
82+
print("Actual Array: ", arr)
83+
84+
divideAndConquer(arr)
85+
86+
87+
# quick sort
88+
89+
# binary search (recursive)
90+
# binary search (iterative)
91+
if __name__ == "__main__":
92+
# generate random array
93+
arr = list()
94+
random.seed(1)
95+
for i in range(10):
96+
arr.append(random.randint(0, 100))
97+
print("random array:", arr)
98+
99+
# insertion sort test
100+
print()
101+
print("*** Insertion Sort ***")
102+
print("Original Array:", arr)
103+
arr_copy = list(arr)
104+
insertionSort(arr_copy)
105+
print("sorted:", arr_copy)
106+
107+
# bubble sort test
108+
print()
109+
print("*** Bubble Sort ***")
110+
print("Original Array:", arr)
111+
arr_copy = list(arr)
112+
bubbleSort(arr_copy)
113+
print("Sorted:", arr_copy)
114+
115+
# heap sort test
116+
print()
117+
print("*** Heap Sort ***")
118+
print("Original Array:", arr)
119+
arr_copy = list(arr)
120+
heapSort(arr_copy)
121+
print("Sorted:", arr_copy)
122+
123+
# merge sort test
124+
print()
125+
print("*** Merge Sort ***")
126+
print("Original Array:", arr)
127+
arr_copy = list(arr)
128+
mergeSort(arr_copy)
129+
print("Sorted:", arr_copy)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /