Python实现的几个常用排序算法实例


Posted in Python onJune 16, 2014

前段时间为准备百度面试恶补的东西,虽然最后还是被刷了,还是把那几天的“战利品”放点上来,算法一直是自己比较薄弱的地方,以后还要更加努力啊。

下面用Python实现了几个常用的排序,如快速排序,选择排序,以及二路并归排序等等。

#encoding=utf-8
import random
from copy import copy
def directInsertSort(seq):
 """ 直接插入排序 """
 size = len(seq)
 for i in range(1,size):
  tmp, j = seq[i], i
  while j > 0 and tmp < seq[j-1]:
   seq[j], j = seq[j-1], j-1
  seq[j] = tmp
 return seq
def directSelectSort(seq):
 """ 直接选择排序 """
 size = len(seq)
 for i in range(0,size - 1):
  k = i;j = i+1
  while j < size:
   if seq[j] < seq[k]:
    k = j
   j += 1
  seq[i],seq[k] = seq[k],seq[i]
 return seq
def bubbleSort(seq):
 """冒泡排序"""
 size = len(seq)
 for i in range(1,size):
  for j in range(0,size-i):
   if seq[j+1] < seq[j]:
    seq[j+1],seq[j] = seq[j],seq[j+1]
 return seq
def _divide(seq, low, high):
 """快速排序划分函数"""
 tmp = seq[low]
 while low != high:
  while low < high and seq[high] >= tmp: high -= 1
  if low < high:
   seq[low] = seq[high]
   low += 1
  while low < high and seq[low] <= tmp: low += 1
  if low < high:
   seq[high] = seq[low]
   high -= 1
 seq[low] = tmp
 return low
def _quickSort(seq, low, high):
 """快速排序辅助函数"""
 if low >= high: return
 mid = _divide(seq, low, high)
 _quickSort(seq, low, mid - 1)
 _quickSort(seq, mid + 1, high)
def quickSort(seq):
 """快速排序包裹函数"""
 size = len(seq)
 _quickSort(seq, 0, size - 1)
 return seq
def merge(seq, left, mid, right):
 tmp = []
 i, j = left, mid
 while i < mid and j <= right:
  if seq[i] < seq[j]:
   tmp.append(seq[i])
   i += 1
  else:
   tmp.append(seq[j])
   j += 1
 if i < mid: tmp.extend(seq[i:])
 if j <= right: tmp.extend(seq[j:])
 seq[left:right+1] = tmp[0:right-left+1]
def _mergeSort(seq, left, right):
 if left == right: 
  return
 else:
  mid = (left + right) / 2
  _mergeSort(seq, left, mid)
  _mergeSort(seq, mid + 1, right)
  merge(seq, left, mid+1, right)
#二路并归排序
def mergeSort(seq):
 size = len(seq)
 _mergeSort(seq, 0, size - 1)
 return seq
if __name__ == '__main__':
 s = [random.randint(0,100) for i in range(0,20)]
 print s
 print "\n"
 print directSelectSort(copy(s))
 print directInsertSort(copy(s))
 print bubbleSort(copy(s))
 print quickSort(copy(s))
 print mergeSort(copy(s))

运行结果如下:
E:\python_project\practice>sorting.py
[10, 47, 56, 76, 64, 84, 26, 8, 47, 51, 88, 81, 32, 95, 91, 29, 28, 69, 61, 45]

[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
[8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95]
Python 相关文章推荐
python实现得到一个给定类的虚函数
Sep 28 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
python ChainMap的使用和说明详解
Jun 11 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
python文本处理的方案(结巴分词并去除符号)
May 26 Python
Python中文件遍历的两种方法
Jun 16 #Python
Python里隐藏的“禅”
Jun 16 #Python
Python程序设计入门(5)类的使用简介
Jun 16 #Python
Python程序设计入门(4)模块和包
Jun 16 #Python
Python程序设计入门(3)数组的使用
Jun 16 #Python
Python程序设计入门(2)变量类型简介
Jun 16 #Python
Python程序设计入门(1)基本语法简介
Jun 13 #Python
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Python字符串的常见操作实例小结
2019/04/08 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
怎么写好自荐信
2013/10/30 职场文书
学校安全责任书
2014/04/14 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
最感人的道歉情书
2015/05/12 职场文书
怎样写家长意见
2015/06/04 职场文书
创业计划书之书店
2019/09/10 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
create-react-app开发常用配置教程
2022/06/25 Javascript