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中的ceil()方法使用教程
May 14 Python
python采集百度百科的方法
Jun 05 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
python 显示数组全部元素的方法
Apr 19 Python
对python中执行DOS命令的3种方法总结
May 12 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python Celery多队列配置代码实例
Nov 22 Python
Python-opencv 双线性插值实例
Jan 17 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
Python操作Excel把数据分给sheet
May 20 Python
详解Python为什么不用设计模式
Jun 24 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
Angular实现form自动布局
2016/01/28 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
电子商务专业应届生求职信
2014/05/28 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
公司年夜饭通知
2015/04/25 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
使用Ajax实现无刷新上传文件
2022/04/12 Javascript