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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python 正则表达式的高级用法
Dec 04 Python
Python工程师面试必备25条知识点
Jan 17 Python
django模板结构优化的方法
Feb 28 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
python3操作redis实现List列表实例
Aug 04 Python
python playwright 自动等待和断言详解
Nov 27 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
删除无限级目录与文件代码共享
2006/07/12 PHP
默默简单的写了一个模板引擎
2007/01/02 PHP
PHPCMS的使用小结
2010/09/20 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
python从入门到精通(DAY 3)
2015/12/20 Python
Python实现登陆文件验证方法
2018/10/06 Python
python中while和for的区别总结
2019/06/28 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
商务助理岗位职责
2013/11/13 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
详解MySQL集群搭建
2021/05/26 MySQL