-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsort.py
82 lines (75 loc) · 1.73 KB
/
sort.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def bubbleSort(l):
length = len(l)
for i in range(length):
for j in range(i+1,length):
if l[j] < l[i]:
l[j],l[i] = l[i], l[j]
return l
def insertionSort(l):
n = len(l)
i = 0
while i < n:
temp = l[i]
for j in range(i+1,n):
if l[i] > l[j]:
l[j],l[i] = l[i], l[j]
break
if l[i] == temp:
i += 1
return l
def quickSort(arr):
return quickSortHelper(arr,0,len(arr)-1)
def quickSortHelper(arr,l,h):
if h <= l:
return arr
p = partition(arr,l,h)
quickSortHelper(arr,l,p-1)
quickSortHelper(arr,p+1,h)
return arr
def partition(arr,l,h):
pivot = arr[h]
i = l-1
for j in range(l,h):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[h] = arr[h], arr[i+1]
return i+1
def mergeSort(arr):
length = len(arr)
if length <= 1:
return arr
mid = length//2
L = arr[:mid]
R = arr[mid:]
a = mergeSort(L)
b = mergeSort(R)
i = j = 0
for index in range(length):
if i == len(b):
arr[index] = a[j]
j += 1
elif j == len(a):
arr[index] = b[i]
i += 1
elif b[i] < a[j]:
arr[index] = b[i]
i += 1
else:
arr[index] = a[j]
j += 1
return arr
if __name__ == "__main__":
l = [9,32,4,6,8,4,1]
l2 = [9]
l3 = [32,9]
l1 = []
print(l[:len(l)//2])
print(insertionSort(l1))
print(insertionSort(l))
print(insertionSort(l2))
print(insertionSort(l3))
print(mergeSort(l1))
print(mergeSort(l))
print(mergeSort(l2))
print(mergeSort(l3))