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复制文件的方法实例详解
May 22 Python
Python中random模块生成随机数详解
Mar 10 Python
Python中的浮点数原理与运算分析
Oct 12 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
python输出数学符号实例
May 11 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
python 瀑布线指标编写实例
Jun 03 Python
基于python实现操作redis及消息队列
Aug 27 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
详解python爬取弹幕与数据分析
Nov 14 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
Laravel5中contracts详解
2015/03/02 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
Python中bisect的用法
2014/09/23 Python
Python 爬虫的工具列表大全
2016/01/31 Python
Python迭代和迭代器详解
2016/11/10 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python里运用私有属性和方法总结
2019/07/08 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
2015年见习期工作总结
2014/12/12 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL