查看: 1466|回复: 1
收起左侧

[资料分享] 【排序】快速排序法python实现

Lihoon 2020-3-17 20:00:51 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
本帖最后由 Lihoon 于 2020-3-17 20:14 编辑

首先,还是建立生成随机数组的程序:random_list.py
  1. #-*- coding:utf-8 -*-
  2. # Created Date: 2020/03/10

  3. import random

  4. def random_list(n):
  5.         """返回一个长度为n的随机数列表,数值为[0,1000)"""
  6.         print("Input number is :{}".format(n))
  7.         iList = []
  8.         for num in range(n):
  9.                 iList.append(random.randrange(1000))
  10.         return iList
  11.         
  12. if __name__ == "__main__":
  13.         iList = random_list(10)
  14.         print(iList)
复制代码
然后,建立快速排序的程序:quick_sort.py
  1. #-*- coding:utf-8 -*-
  2. #Created Date: 2020/03/16

  3. from random_list import random_list

  4. import timeit
  5. import sys

  6. # 命令行执行运行命令时传入数组的长度
  7. num = sys.argv[1]
  8. iList = random_list(int(num))

  9. def quick_sort(iList):
  10.         '''定义快速排序函数'''
  11.         if len(iList) <= 1:
  12.                 return iList
  13.         # 定义两个空列表
  14.         left = []
  15.         right = []
  16.         # 从列表中第2个数字开始取数字
  17.         for var in iList[1:]:
  18.                 # 如果取出来的值比第1个数小,则放到左边的数列中,否则放到右边的数列中
  19.                 if var <= iList[0]:
  20.                         left.append(var)
  21.                 else:
  22.                         right.append(var)
  23.         """ 通过递归调用函数自身的方式,对第一次分隔的左右数列进行递归分隔,直到每个左右数列只有1个元素,然后按顺序再结合,重新生成排序好的数列
  24.         """
  25.         return quick_sort(left) + [iList[0]] + quick_sort(right)
  26.         
  27. if __name__ == "__main__":
  28.         print("source: {}".format(iList))
  29.         print("results: {}".format(quick_sort(iList)))
  30.         print(timeit.timeit("quick_sort(iList)", "from __main__ import quick_sort, iList", number = 100))
复制代码
在命令行输入运行指令:
  1. python quick_sort.py 10   #传入参数10,表示数组长度
复制代码
执行结果为:
  1. Input number is :10
  2. source: [683, 99, 772, 66, 863, 766, 175, 928, 86, 455]
  3. results: [66, 86, 99, 175, 455, 683, 766, 772, 863, 928]
  4. 0.0010827 #计算时间
复制代码






上一篇:【排序】冒泡排序法python实现
下一篇:【排序】归并排序法python实现

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部