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 logging模块学习笔记
May 24 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
python绘制立方体的方法
Jul 02 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Python递归函数实例讲解
Feb 27 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
django中的图片验证码功能
Sep 18 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
判断ie的两种简单方法
2013/08/12 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
js微信分享实现代码
2020/10/11 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
koa源码中promise的解读
2018/11/13 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
让python在hadoop上跑起来
2016/01/27 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
出纳的岗位职责
2013/11/09 职场文书
公司承诺书怎么写
2014/05/24 职场文书
国际金融专业自荐信
2014/07/05 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
MySQL主从切换的超详细步骤
2022/06/28 MySQL
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript