python实现快速排序的示例(二分法思想)


Posted in Python onMarch 12, 2018

本文介绍了python实现快速排序的示例(二分法思想),分享给大家,具体如下:

实现思路

将所需要的数字存入一个列表中

1.首先,设置将最左侧的那个数设置为基准数,在列表中索引为0
2.然后设置两个移动位(用于比较),分别为最左边和最右边
3.然后最右边那位向左移寻找比基准数小的那一位,最右边那位则从左向右寻找比基准数大的那一位
4.再后,将找到的两位对应的数字替换,继续执行3,直到两个移动位相遇,把基准为替换到相遇的那一位
5.最后,将列表以基准数那一位一分为二切开,左边和右边部分继续执行上述1-4步,直到没有比较数为止(也就是一个数),排序完成。

看下图你就明白了:

python实现快速排序的示例(二分法思想)

实现代码

# coding: utf-8
# 快速排序,利用二分思想实现
def quick_sort(list, left, right):
  if left > right:
    return
  temp = list[left]
  i = left
  j = right
  while i != j:
    # 先从右向左寻找
    while list[j] >= temp and i < j:
      j -= 1
    # 再从左向右寻找
    while list[i] <= temp and i < j:
      i += 1
    if i < j:
      t = list[i]
      list[i] = list[j]
      list[j] = t
  # 基准数替换
  list[left] = list[i]
  list[i] = temp
  # 递归调用
  quick_sort(list, left, i - 1)
  quick_sort(list, i + 1, right)

while True:
  list = []
  try:
    num = int(input('你想比较几个数?\n'))
  except ValueError:
    continue
  for k in range(num):
    a = int(input('请输入第' + str(k+1) + '个数:\n'))
    list.append(a)
  quick_sort(list, 0, num-1)
  print('排序结果为:')
  for l in range(len(list)):
    print(list[l], end=' ')
  print()

快速排序比较冒泡排序效率要高得多~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
Python导入模块时遇到的错误分析
Aug 30 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
python实现汉诺塔算法
Mar 01 Python
python读取xlsx的方法
Dec 25 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
Python实现8种常用抽样方法
Jun 27 Python
Python中的pack和unpack的使用
Mar 12 #Python
python文本数据相似度的度量
Mar 12 #Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 #Python
python实现拓扑排序的基本教程
Mar 11 #Python
Python实现图片尺寸缩放脚本
Mar 10 #Python
TensorFlow平台下Python实现神经网络
Mar 10 #Python
python构建深度神经网络(续)
Mar 10 #Python
You might like
两种php调用Java对象的方法
2006/10/09 PHP
用PHP实现验证码功能
2006/10/09 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP开发注意事项总结
2015/02/04 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
手机端转换rem适应
2017/04/01 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
深入理解javascript中的this
2021/02/08 Javascript
Python中的面向对象编程详解(上)
2015/04/13 Python
Django Highcharts制作图表
2016/08/27 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Python解析json代码实例解析
2019/11/25 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
后勤人员岗位职责
2013/12/17 职场文书
美术教师岗位职责
2014/03/18 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
党员个人对照检查材料
2014/10/01 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android