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实现注册登录系统
Aug 08 Python
快速入门python学习笔记
Dec 06 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
多个应用共存的Django配置方法
May 30 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
python挖矿算力测试程序详解
Jul 03 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
javascript如何创建对象
2016/08/29 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
python循环监控远程端口的方法
2015/03/14 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
python连接数据库的方法
2017/10/19 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
人事代理委托书
2014/09/27 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
冰峪沟导游词
2015/02/09 职场文书
初中班干部工作总结
2015/08/10 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
校长新学期寄语2016
2015/12/04 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python