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中私有函数调用方法解密
Apr 29 Python
python删除不需要的python文件方法
Apr 24 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
python 中如何获取列表的索引
Jul 02 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
python logging设置level失败的解决方法
Feb 19 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Python的信号库Blinker用法详解
Dec 31 Python
对Keras自带Loss Function的深入研究
May 25 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
js 学习笔记(三)
2009/12/29 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
JavaScript错误处理
2015/02/03 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
PyQt5每天必学之布局管理
2018/04/19 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python如何变换环境
2020/07/21 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
药学专业个人的自我评价
2013/12/31 职场文书
全陪导游欢迎词
2014/01/17 职场文书
暑期社会实践感言
2014/02/25 职场文书
高中教师评语大全
2014/04/25 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
领导班子整改措施
2014/10/24 职场文书
关于倡议书的范文
2015/04/29 职场文书
Python中的嵌套循环详情
2022/03/23 Python