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实现的检测网站挂马程序
Nov 30 Python
python简单判断序列是否为空的方法
Jun 30 Python
python3实现暴力穷举博客园密码
Jun 19 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
python中的turtle库函数简单使用教程
Jul 23 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
Python: glob匹配文件的操作
Dec 11 Python
5道关于python基础 while循环练习题
Nov 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
JS Array对象入门分析
2008/10/30 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
python 图片验证码代码
2008/12/07 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python中实现字符串翻转的方法
2018/07/11 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
《果园机器人》教学反思
2014/04/13 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL