-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathquicksort.py
More file actions
52 lines (45 loc) · 1.25 KB
/
quicksort.py
File metadata and controls
52 lines (45 loc) · 1.25 KB
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
def concatenate(left_list, pivot, right_list):
left_list.extend(pivot)
left_list.extend(right_list)
return left_list
def quicksort(li):
if len(li)==1 or len(li)==0:
return li
pivot = li[0]
left_list= []
right_list = []
for i in range(1, len(li)):
if(li[i]<=pivot):
left_list.append(li[i])
else:
right_list.append(li[i])
return concatenate(quicksort(left_list), [pivot], quicksort(right_list))
def qs(li):
return quicksort(li)
import unittest
import random
class TestQuickSort(unittest.TestCase):
def test_empty(self):
print "Test ran"
lst = []
ls = qs(lst)
self.assertEqual(len(ls), 0)
def test_one(self):
lst = [1]
ls = qs(lst)
self.assertEqual(len(ls), 1)
self.assertEqual(ls[0], 1)
def test_equal(self):
lst = [1,1]
ls = qs(lst)
self.assertEqual(len(ls), 2)
self.assertEqual(ls[1], 1)
def test_random(self):
size = random.randint(0, 10)
lst = [random.randint(0, 100) for i in range(size)]
ls = qs(lst)
self.assertEqual(len(ls), size)
lst.sort()
self.assertEqual(ls[0], lst[0])
if __name__=="__main__":
unittest.main()