模仿qsort()实现一个通用的排序函数:msort()
源码地址:
https://github.com/GYgavin/my-git/blob/master/msort/msort.py
https://github.com/GYgavin/my-git/blob/master/msort/randomnum.py
https://github.com/GYgavin/my-git/blob/master/msort/sort.py
主要目的 : 实现代码模块化,运行,测试
语言选择 : python
算法选择 : quicksort
算法设计代码 : msort.py
#!/usr/bin/env python
def quickSort(alist):
quickSortHelper(alist,0,len(alist)-1)
return alist
def quickSortHelper(alist,first,last):
if first<last:
splitpoint = partition(alist,first,last)
quickSortHelper(alist,first,splitpoint-1)
quickSortHelper(alist,splitpoint+1,last)
def partition(alist,first,last):
pivotvalue = alist[first]
left = first+1
right = last
done = False
while not done:
while left <= right and alist[left] <= pivotvalue:
left = left + 1
while alist[right] >= pivotvalue and right >= left:
right = right -1
if right < left:
done = True
else:
temp = alist[left]
alist[left] = alist[right]
alist[right] = temp
temp = alist[first]
alist[first] = alist[right]
alist[right] = temp
return right
生成随机数 : randomnum.py
#!/usr/bin/env python
import random
n = int(input('How manys random numbers do you want to build? '))
def randomnum():
datas = []
a = len(datas)
while a < n:
x = random.randint(1,10000)
datas.append(x)
a = len(datas)
return datas
主功能函数 :sort.py
#!/usr/bin/env python
from msort import *
from dataoperate import *
from randomnum import *
import time
def Out(x):
list = x
count=0
for i in list:
print(i,end=' ')
count += 1
if(count%10==0):
print(end='\n')
alist = randomnum()
print('\norigin data:')
Out(alist)
start = time.clock()
operated = quickSort(alist)
end = time.clock()
print('\nresult data:')
Out(operated)
Max = operated[len(alist)-1]
print('\nYou have built',n,'random numbers, and the max is',Max,'!')
print('This program running with',end-start,'seconds!')
运行结果 :
测试结果 :
稍等一下,正在加工!