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
20招让你的Python飞起来!
Sep 27 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
python实现简单登陆流程的方法
Apr 22 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
Python3中详解fabfile的编写
Jun 24 Python
flask session组件的使用示例
Dec 25 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
简单了解django索引的相关知识
Jul 17 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python config文件的读写操作示例
Sep 27 Python
Python读取csv文件实例解析
Dec 30 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
咖啡知识大全
2021/03/03 新手入门
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php格式文件打开的四种方法
2018/02/24 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
名片管理系统python版
2018/01/11 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
中餐厅经理岗位职责
2014/04/11 职场文书
教师评语大全
2014/04/28 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
四年级学生期末评语
2014/12/26 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
酒店温馨提示语
2015/07/14 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
vue2实现provide inject传递响应式
2021/05/21 Vue.js
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
python中取整数的几种方法
2021/11/07 Python
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
CSS的calc函数用法小结
2022/06/25 HTML / CSS