Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例


Posted in Python onMay 04, 2019

本文实例讲述了Python实现的插入排序,冒泡排序,快速排序,选择排序算法。分享给大家供大家参考,具体如下:

#!/usr/bin/python
# coding:utf-8
#直接插入排序
def insert_sort(list):
  for i in range(len(list)):
    Key = list [i]      #待插入元素
      j = i - 1
      while(Key < list[j] and j >= 0):
        list[j+1] = list[j]  #后移元素
        list[j] = Key
        j=j-1
  return list
#冒泡排序  
def bubble_sort(list):
  for i in range(1, len(list)):
    for j in range(len(list)-i):
      if list[j] > list [j+1]:
        list[j+1],list[j] =list[j],list[j+1]
  return list
#快速排序
def position_key(list, low, high):
  i = low
  j = high
  key = list[low]
  while(i < j):
    while(i < j and list[j] >= key):  #从右向左,寻找第一个小于基准元素的数据索引。 注意:i<y 的判断,内循环更新j
      j -= 1
    if i < j :
      list[i] = list[j]
    while(i<j and list[i] <= key):   #从左向右,寻找地一个大于基准元素的数据索引。i<y同上
      i += 1
    if i < j:
      list[j] = list[i]
  list[j] = key     # 基准元素位置 
  return j
def quick_sort(list, low, high):
  if low < high:
    position = position_key(list, low, high) #将数据分成前后两个子序列(前边序列值均小于后边序列)
    quick_sort(list, low, position-1)    #将前面的序列快速排序
    quick_sort(list, position+1, high)    #将后面的序列快速排序
  return list
#选择排序
def select_sort(list):
  for i in range(len(list)):
    for j in range(i, len(list)):
      if list[i] > list[j]:
        list[i], list[j] = list[j], list[i]
  return list
list = [23, 232, 11, 89,121, 64, 34, 12, 23423, 2312, 167, 768, 932, 346, 32789, 335, 2, 1145, 34, 56, 99, 111]
print '原始序列  :', list
print '直接插入排序:', insert_sort(list)
print '冒泡排序  :', bubble_sort(list)
print '快速排序  :', quick_sort(list, 0, len(list)-1)
print '选择排序  :', select_sort(list)

结果如下:

原始序列    : [23, 232, 11, 89, 121, 64, 34, 12, 23423, 2312, 167, 768, 932, 346, 32789, 335, 2, 1145, 34, 56, 99, 111]
直接插入排序: [2, 11, 12, 23, 34, 34, 56, 64, 89, 99, 111, 121, 167, 232, 335, 346, 768, 932, 1145, 2312, 23423, 32789]
冒泡排序    : [2, 11, 12, 23, 34, 34, 56, 64, 89, 99, 111, 121, 167, 232, 335, 346, 768, 932, 1145, 2312, 23423, 32789]
快速排序    : [2, 11, 12, 23, 34, 34, 56, 64, 89, 99, 111, 121, 167, 232, 335, 346, 768, 932, 1145, 2312, 23423, 32789]
选择排序    : [2, 11, 12, 23, 34, 34, 56, 64, 89, 99, 111, 121, 167, 232, 335, 346, 768, 932, 1145, 2312, 23423, 32789]

Python 相关文章推荐
Python多线程编程(六):可重入锁RLock
Apr 05 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python fileinput模块使用实例
Jun 03 Python
Python的time模块中的常用方法整理
Jun 18 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
Python bytes string相互转换过程解析
Mar 05 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
python中绕过反爬虫的方法总结
Nov 25 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 #Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 #Python
Python实现将HTML转成PDF的方法分析
May 04 #Python
Python第三方库face_recognition在windows上的安装过程
May 03 #Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 #Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 #Python
利用python将图片版PDF转文字版PDF
May 03 #Python
You might like
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
C语言中break与continue的区别
2012/07/12 面试题
为什么需要版本控制
2016/10/28 面试题
数控技术专业毕业自荐书范文
2014/02/05 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
幼师求职信
2014/06/23 职场文书
画展邀请函
2015/01/31 职场文书
运动会开幕式致辞
2015/07/29 职场文书
Golang bufio详细讲解
2022/04/21 Golang
pandas中pd.groupby()的用法详解
2022/06/16 Python