In [17]:
class AbstractQuickSort(object):
def run(self):
f = open("QuickSort.txt", "r")
source = [int(line) for line in f]
f.close()
print self.partition(source, 0, len(source)-1)
def partition(self, A, l, r):
if l >= r:
return 0
self.choose_pivot(A, l, r)
p = A[l]
i = l + 1
for j in xrange(l+1, r+1):
if A[j] < p:
A[i], A[j] = A[j], A[i]
i += 1
q = i-1
A[l], A[q] = A[q], A[l]
return (r-l) + self.partition(A, l, q-1) + self.partition(A, q+1, r)
def choose_pivot(self, A, l, r):
raise NotImplementedError()
In [18]:
class Question1(AbstractQuickSort):
def choose_pivot(self, A, l, r):
pass
Question1().run()
In [19]:
class Question2(AbstractQuickSort):
def choose_pivot(self, A, l, r):
A[l], A[r] = A[r], A[l]
Question2().run()
In [20]:
class Question3(AbstractQuickSort):
def choose_pivot(self, A, l, r):
mid = (l+r)//2
if A[l] < A[mid] < A[r] or A[r] < A[mid] < A[l]:
A[l], A[mid] = A[mid], A[l]
elif A[l] < A[r] < A[mid] or A[mid] < A[r] < A[l]:
A[l], A[r] = A[r], A[l]
Question3().run()
In [ ]: