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中threading模块join函数用法实例分析
Jun 04 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
PHP实现发送和接收JSON请求
Jun 07 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
Python实现FTP文件传输的实例
Jul 07 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
Python3 A*寻路算法实现方式
Dec 24 Python
python实现猜数游戏
Mar 27 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Django项目创建及管理实现流程详解
Oct 13 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将任何格式视频转为flv的代码
2009/09/03 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python图像常规操作
2017/11/11 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
幼儿园教师工作感言
2014/02/15 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
升职自荐信范文
2015/03/27 职场文书
借钱欠条怎么写
2015/07/03 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
react antd实现动态增减表单
2021/06/03 Javascript