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算法之栈(stack)的实现
Aug 18 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
pandas的排序和排名的具体使用
Jul 31 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
python模块导入的方法
Oct 24 Python
如何搭建pytorch环境的方法步骤
May 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
关于时间计算的结总
2006/12/06 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
JS数学函数Exp使用说明
2012/08/09 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
基于Python闭包及其作用域详解
2017/08/28 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
python怎么提高计算速度
2020/06/11 Python
Django celery异步任务实现代码示例
2020/11/26 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
新电JAVA笔试题目
2014/08/31 面试题
Why do we need Unit test
2013/01/03 面试题
材料采购员岗位职责
2013/12/17 职场文书
自我评价范文
2013/12/22 职场文书
十佳青年个人事迹材料
2014/01/28 职场文书
保密普查工作实施方案
2014/02/25 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
团队口号大全
2014/06/06 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
小学教学工作总结2015
2015/05/13 职场文书
企业法律事务工作总结
2015/08/11 职场文书