-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreverse_list.py
76 lines (64 loc) · 2.01 KB
/
reverse_list.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
import sys
class ComplexListDataStructure():
def __init__(self, arr=[]):
self.arr = arr
self.size = len(arr)
def swap(self, i, j):
tmp = self.arr[i]
self.arr[i] = self.arr[j]
self.arr[j] = tmp
def reverse1(self):
"""
Time: O(n/2) == O(n) where n is self.size
Space: O(1)
"""
i = 0
j = self.size-1
while (i < j):
self.swap(i, j)
i += 1
j -= 1
return self.arr
def reverse2(self):
if (len(self.arr) == 1):
return self.arr
else:
firstElement = self.arr.pop(0)
self.reverse2()
self.arr.append(firstElement)
def removeMax(self):
maxElement = -sys.maxsize
maxIndex = -sys.maxsize
for index, elem in enumerate(self.arr):
if (elem > maxElement):
maxElement = elem
maxIndex = index
self.arr.pop(maxIndex)
return maxElement
def removeMin(self):
minElement = sys.maxsize
minIndex = sys.maxsize
for index, elem in enumerate(self.arr):
if (elem < minElement):
minElement = elem
minIndex = index
self.arr.pop(minIndex)
return minElement
def insertionSort(self, ascending=True):
if (len(self.arr) == 1):
return self.arr
else:
if (ascending):
maxElement = self.removeMax()
self.insertionSort(ascending)
self.arr.append(maxElement)
else:
minElement = self.removeMin()
self.insertionSort(ascending)
self.arr.append(minElement)
def getArr(self):
return self.arr
if __name__ == '__main__':
obj = ComplexListDataStructure(arr=[10,8,543,24,234,23,52,2])
obj.insertionSort()
print(obj.getArr())