Python实现快速排序和插入排序算法及自定义排序的示例


Posted in Python onFebruary 16, 2016

一、快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    快速排序,递归实现

def quick_sort(num_list):
  """
  快速排序
  """
  if num_list == []:
    return num_list
  smallList = []
  bigList = []
  middleElement = num_list[0]
  for i in num_list[1:]:
    if i <= middleElement:
      smallList.append(i)
    else:
      bigList.append(i)
  return quick_sort(smallList)+[middleElement]+quick_sort(bigList)

二、插入排序

    插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

    插入排序

def insert_sort(num_list):
  """
  插入排序
  """
  for i in range(len(num_list)-1):
    for j in range(i+1, len(num_list)):
      if num_list[i]>num_list[j]:
        num_list[i],num_list[j] = num_list[j],num_list[i]
  return num_list


三、自定义排序
利用 sort() 或 sorted() 的 key 即可实现。

    示例如下:

def sort_key(obj):
  sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
  return sorted_list.index(obj)
 
 
if __name__ == '__main__':
  print sorted(range(10), key=sort_key)
 
# 输出结果如下
[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]

 
# 利用关键字在列表中的索引位置,进行自定义排序

Python 相关文章推荐
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
SQLite3中文编码 Python的实现
Jan 11 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python科学画图代码分享
Nov 29 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
TensorFlow打印输出tensor的值
Apr 19 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 Python
Python学习开发之图形用户界面详解
Aug 23 Python
python实现红包裂变算法
Feb 16 #Python
轻松实现python搭建微信公众平台
Feb 16 #Python
十条建议帮你提高Python编程效率
Feb 16 #Python
bpython 功能强大的Python shell
Feb 16 #Python
深入解读Python解析XML的几种方式
Feb 16 #Python
Python3.2模拟实现webqq登录
Feb 15 #Python
python编码最佳实践之总结
Feb 14 #Python
You might like
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python selenium 三种等待方式解读
2016/09/15 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python在每个字符后添加空格的实例
2018/05/07 Python
如何基于python实现脚本加密
2019/12/28 Python
Python datetime模块的使用示例
2021/02/02 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
应届毕业生个人求职信范文
2014/01/29 职场文书
黄河的主人教学反思
2014/02/07 职场文书
继承权公证书
2014/04/09 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
个人委托书怎么写
2014/09/17 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
小学母亲节活动总结
2015/02/10 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记