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处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
浅析Python多线程下的变量问题
Apr 28 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python环境变量设置方法
Aug 28 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
python 多线程死锁问题的解决方案
Aug 25 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python requests库参数提交的注意事项总结
Mar 29 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python内建数据结构详解
2016/02/03 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python 3.8 新功能全解
2019/07/25 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
如何用Lucene索引数据库
2016/02/23 面试题
法学函授自我鉴定
2014/02/06 职场文书
敬老院活动总结
2014/04/28 职场文书
优秀员工自荐书
2015/03/06 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技