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的Tornado框架对子域名和泛域名的支持
May 02 Python
Python中type的构造函数参数含义说明
Jun 21 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
python数据处理实战(必看篇)
Jun 11 Python
Python编写一个闹钟功能
Jul 11 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python生成带有表格的图片实例
Feb 03 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
Python csv文件的读写操作实例详解
Nov 19 Python
Python多线程多进程实例对比解析
Mar 12 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 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 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP进程同步代码实例
2015/02/12 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
关于vue面试题汇总
2018/03/20 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
测试驱动开发的主要步骤是什么
2014/12/10 面试题
地理科学专业毕业生求职信
2013/10/15 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
元旦促销方案
2014/03/15 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
激励口号大全
2014/06/17 职场文书
房屋认购协议书
2015/01/29 职场文书
好好学习保证书
2015/02/26 职场文书
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android