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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python 中的 else详解
Apr 23 Python
python实现日常记账本小程序
Mar 10 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
python获取点击的坐标画图形的方法
Jul 09 Python
django如何实现视图重定向
Jul 24 Python
Django 实现对已存在的model进行更改
Mar 28 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
Python importlib模块重载使用方法详解
Oct 13 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 生成文字png图片的代码
2011/04/17 PHP
php查询ip所在地的方法
2014/12/05 PHP
php实现网页端验证码功能
2017/07/11 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
self.attachevent is not a function的解决方法
2017/04/04 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python二分查找详解
2015/09/13 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
opencv 阈值分割的具体使用
2020/07/08 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
高二物理教学反思
2014/02/08 职场文书
教师校本培训方案
2014/02/26 职场文书
动员大会主持词
2014/03/20 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
计算机专业自荐信
2015/03/05 职场文书
一年级语文教学随笔
2015/08/14 职场文书
2016党校培训心得体会
2016/01/07 职场文书
Nginx进程调度问题详解
2021/09/25 Servers
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技