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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python实现获取网站PR及百度权重
Jan 21 Python
Python SQLite3简介
Feb 22 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
pytorch 共享参数的示例
Aug 17 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
python中的 zip函数详解及用法举例
Feb 16 Python
Python中and和or如何使用
May 28 Python
Python中zip函数如何使用
Jun 04 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 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设计模式小结
2013/02/15 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JavaScript 变量基础知识
2009/11/07 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
Js四则运算函数代码
2012/07/21 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python生成器表达式和列表解析
2016/03/10 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
一百行python代码将图片转成字符画
2021/02/19 Python
python tkinter控件布局项目实例
2019/11/04 Python
Django Form常用功能及代码示例
2020/10/13 Python
综合测评自我鉴定
2013/10/08 职场文书
物理教师自荐信范文
2013/12/28 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
委托公证书
2014/04/08 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis