#实现快速排序、归并排序
#---------快排(三数取中)---------
def QuickSort():
array = Array(10000)
qsort(0 , len(array)-1 , array)
return array
def qsort(start , end , array):
if start < end:
key = partation(array , start , end)
qsort(start , key-1 , array)
qsort(key+1 , end , array)
def swap(array , start , end):
temp = array[start]
array[start] = array[end]
array[end] = temp
def change(array , start , mid , end):
if array[start] > array[mid]:
swap(array , start , mid)
if array[start]>array[end]:
swap(array , start , end)
if array[mid] > array[end]:
swap(array , mid , end)
swap(array , mid , start)
def partation(array , start , end):
#mid = int((start+end)/2)
#change(array , start , mid , end)
temp = array[start]
while start < end :
while start<end and array[end]<=temp:
end-=1
swap(array , start , end)
while start<end and array[start]>=temp:
start+=1
swap(array , start , end)
return start
#---------------归并------------
def merge(a , b):
c = []
i = 0
j = 0
while i<len(a) and j<len(b):
if a[i] > b[j]:
c.append(a[i])
i+=1
else:
c.append(b[j])
j+=1
if i>=len(a):
for k in range(j , len(b)):
c.append(b[k])
if j>=len(b):
for k in range(i , len(a)):
c.append(a[k])
return c
def devide(array):
if len(array) == 1:
return array
else:
mid = int((0 + len(array)) / 2)
leftArray = devide(array[0:mid])
rightArray = devide(array[mid:len(array)])
return merge(leftArray , rightArray)
def mergesort():
array = Array(100)
m = devide(array)
return m
展开