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中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
Python读写Excel文件方法介绍
Nov 22 Python
python调用fortran模块
Apr 08 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
Python一行代码实现快速排序的方法
Apr 30 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
python爬虫selenium模块详解
Mar 30 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 Python
Python中tqdm的使用和例子
Sep 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和XSS跨站攻击的防范
2007/04/17 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
php支付宝APP支付功能
2020/07/29 PHP
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
Python使用struct处理二进制的实例详解
2017/09/11 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
就业协议书怎么填
2014/04/11 职场文书
目标责任书格式
2014/07/28 职场文书
雷峰塔导游词
2015/02/09 职场文书
工作岗位职责范本
2015/02/15 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
九九重阳节致辞
2015/07/31 职场文书