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 提取文件的小程序
Jul 29 Python
python每次处理固定个数的字符的方法总结
Jan 29 Python
Python线程的两种编程方式
Apr 14 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
python global关键字的用法详解
Sep 05 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
总结Python变量的相关知识
Jun 28 Python
Python中itertools库的四个函数介绍
Apr 06 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中批量替换文件名的实现代码
2011/07/20 PHP
深入理解PHP内核(一)
2015/11/10 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
用python写asp详细讲解
2013/12/16 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
药店主任岗位责任制
2014/02/10 职场文书
餐厅总厨求职信
2014/03/04 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
SQL Server使用导出向导功能
2022/04/08 SQL Server