模仿qsort()实现一个通用的排序函数:msort()

模仿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!')

运行结果 :

这里写图片描述


测试结果 :

稍等一下,正在加工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值