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中下划线的使用方法
Mar 27 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
Python实现复杂对象转JSON的方法示例
Jun 22 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
利用Python校准本地时间的方法教程
Oct 31 Python
python 求定积分和不定积分示例
Nov 20 Python
python 实现二维列表转置
Dec 02 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
详解python算法常用技巧与内置库
Oct 17 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php 浮点数比较方法详解
2017/05/05 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
js数组操作常用方法
2014/05/08 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
主题团日活动总结
2014/06/25 职场文书
生物学专业求职信
2014/07/23 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Redis IP地址的绑定的实现
2021/05/08 Redis
关于mysql中string和number的转换问题
2022/06/14 MySQL