python实现排序算法解析


Posted in Python onSeptember 08, 2018

本文实例为大家分享了python实现排序算法的具体代码,供大家参考,具体内容如下

一、冒泡排序

def bububle_sort(alist):
 """冒泡排序(稳定|n^2m)"""
 n = len(alist)
 for j in range(n-1):
  count = 0
  for i in range(0,n-1-j):
   if alist[i]>alist[i+1]:
    count +=1
    alist[i], alist[i+1] = alist[i+1], alist[i]
  if count==0:
   return

二、选择排序

def select_sort(alist):
  """选择排序(不稳定|n^2)"""
  n = len(alist)
  for j in range(n-1):
    min_index = j
    for i in range(j+1,n):
      if alist[min_index] > alist[i]:
        min_index = i
    alist[j], alist[min_index] = alist[min_index], alist[j]

三、插入排序

def insert_sort(alist):
  """插入排序(稳定|n^2)"""
  n = len(alist)
  for j in range(1,n):
    i = j
    while i>0:
      if alist[i] < alist[i-1]:
        alist[i], alist[i-1] = alist[i-1], alist[i]
        i -= 1
      else:
        break

四、希尔排序

def shell_sort(alist):
  """希尔排序(不稳定|n^2)"""
  n = len(alist)
  gap = n//2

  while gap>=1:
    for j in range(gap,n):
      i=j
      while i>0:
        if alist[i]<alist[i-gap]:
          alist[i], alist[i-gap] = alist[i-gap], alist[i]
          i -= gap
        else:
          break
    gap //=2

五、快速排序

def quick_sort(alist, first, last):
  """快速排序(不稳定|n^2)"""
  if first >= last:
    return
  mid_value = alist[first]
  low = first
  high = last
  while low < high:
    #high左移
    while low <high and alist[high] >= mid_value:
      high -= 1
    alist[low] = alist[high]
    #low右移
    while low < high and alist[low] < mid_value:
      low += 1
    alist[high] =alist[low] 
  #从循环退出时,low=high
  alist[low] = mid_value

  #对low左边的列表执行快速排序
  quick_sort(alist, first, low-1)
  #对low右边的列表执行快速排序
  quick_sort(alist, low+1, last)

六、归并排序

def merge_sort(alist):
  """归并排序(稳定|nlgn)"""
  n = len(alist)
  if n <= 1:
    return alist
  mid = n//2

  #left 采用归并排序后形成新的有序列表
  left_li = merge_sort(alist[:mid])
  #right 采用归并排序后形成新的有序列表
  right_li = merge_sort(alist[mid:])

  #merge(left, right) 将两个有序的子序列合并为一个新的整体
  left_pointer, right_pointer = 0, 0
  result = []

  while left_pointer < len(left_li) and right_pointer<len(right_li):
    if left_li[left_pointer] < right_li[right_pointer]:
      result.append(left_li[left_pointer])
      left_pointer += 1
    else:
      result.append(right_li[right_pointer])
      right_pointer += 1

  result += left_li[left_pointer:]
  result += right_li[right_pointer:]
  return result

python实现排序算法解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的tab文件操作类分享
Nov 20 Python
python写入中英文字符串到文件的方法
May 06 Python
深入理解python中的atexit模块
Mar 07 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
浅析python的Lambda表达式
Feb 27 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
python随机生成库faker库api实例详解
Nov 28 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
python中return不返回值的问题解析
Jul 22 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 Python
TensorFlow实现Logistic回归
Sep 07 #Python
tensorflow实现简单逻辑回归
Sep 07 #Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 #Python
TensorFlow实现iris数据集线性回归
Sep 07 #Python
TensorFlow实现模型评估
Sep 07 #Python
使用tensorflow实现线性svm
Sep 07 #Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 #Python
You might like
php中随机显示图片的函数代码
2011/06/23 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
解决Django中多条件查询的问题
2019/07/18 Python
python编写简单端口扫描器
2019/09/04 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python中取绝对值简单方法总结
2020/07/24 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
.NET现在共支持多少种语言
2014/02/26 面试题
高中生物教学反思
2014/02/05 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
小学庆六一活动总结
2014/08/28 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
办公室日常管理制度
2015/08/04 职场文书
python 逐步回归算法
2021/04/06 Python
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
python 镜像环境搭建总结
2022/09/23 Python