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中给List添加元素的4种方法分享
Nov 28 Python
Python 列表list使用介绍
Nov 30 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 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从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
javascript一点特殊用法
2008/05/28 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
前端微信支付js代码
2016/07/25 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
会计电算化应届生求职信
2013/11/03 职场文书
自我鉴定三原则
2014/01/13 职场文书
毕业晚会主持词
2014/03/24 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
关于JavaScript轮播图的实现
2021/11/20 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript