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实现绘制树枝简单示例
Jul 24 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
使用Python实现在Windows下安装Django
Oct 17 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
Python socket处理client连接过程解析
Mar 18 Python
python 使用建议与技巧分享(四)
Aug 18 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
python实现网络五子棋
Apr 11 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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
通过html表格发电子邮件
2006/10/09 PHP
php生成文件
2007/01/15 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
javascript 验证日期的函数
2010/03/18 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
简单解决Python文件中文编码问题
2015/11/22 Python
python 性能提升的几种方法
2016/07/15 Python
python循环输出三角形图案的例子
2019/11/22 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
总经理助理的八要求
2013/11/12 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android