Skip to content

Commit aa7456e

Browse files
authored
add Week 3 PA
1 parent 72aa345 commit aa7456e

File tree

2 files changed

+10073
-0
lines changed

2 files changed

+10073
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
2+
with open('QuickSort.txt') as f:
3+
a = [int(x) for x in f]
4+
5+
def FindMedian(A):
6+
minvalue = min(A)
7+
maxvalue = max(A)
8+
for i in range(3):
9+
if A[i] != minvalue and A[i] != maxvalue:
10+
return A[i]
11+
12+
def ChoosePivot(A,flag):
13+
n = len(A)
14+
first = A[0]
15+
final = A[n-1]
16+
if n/2*2==n:
17+
k = n/2 - 1
18+
middle = A[k]
19+
elif n/2*2<n:
20+
k = n/2
21+
middle = A[k]
22+
else:
23+
print 'error in ChoosePivot to choose middle element of A'
24+
25+
B = [first,middle,final]
26+
med = FindMedian(B)
27+
if med==B[0]:
28+
position = 0
29+
elif med==B[1]:
30+
position = k
31+
else:
32+
position = n-1
33+
34+
if flag==1:
35+
return 0
36+
if flag==2:
37+
return n-1
38+
if flag==3:
39+
return position
40+
else:
41+
print 'wrong flag'
42+
43+
def Swap(A,first,second):
44+
second_value = A[second]
45+
first_value = A[first]
46+
A[first] = second_value
47+
A[second] = first_value
48+
return A
49+
50+
def Partition(A):
51+
pivot = A[0]
52+
r = len(A)
53+
i = 1
54+
for j in range(1,r):
55+
if A[j]<pivot:
56+
A = Swap(A,i,j)
57+
i +=1
58+
A = Swap(A,0,i-1)
59+
return A,i-1
60+
61+
def QuickSort(A,flag):
62+
n = len(A)
63+
64+
if n>1:
65+
p = ChoosePivot(A,flag)
66+
A = Swap(A,0,p)
67+
A,pivot_position = Partition(A)
68+
A[:pivot_position],left = QuickSort(A[:pivot_position],flag)
69+
A[pivot_position+1:],right = QuickSort(A[pivot_position+1:],flag)
70+
71+
return A,left+right+n-1
72+
else:
73+
return A,0

0 commit comments

Comments
 (0)