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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
Python timer定时器两种常用方法解析
Jan 20 Python
python_mask_array的用法
Feb 18 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
用Python将库打包发布到pypi
Apr 13 Python
Python matplotlib绘制雷达图
Apr 13 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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP面向对象概念
2011/11/06 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php 问卷调查结果统计
2015/10/08 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python+Wordpress制作小说站
2017/04/14 Python
python构建自定义回调函数详解
2017/06/20 Python
python实现redis三种cas事务操作
2017/12/19 Python
django 将model转换为字典的方法示例
2018/10/16 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
《夏夜多美》教学反思
2014/02/17 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
给学校的建议书范文
2014/05/15 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
2015年母亲节寄语
2015/03/23 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js