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正则表达式re模块详解
Jun 25 Python
Python中字典和JSON互转操作实例
Jan 19 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
Python实现二叉堆
Feb 03 Python
Python中%r和%s的详解及区别
Mar 16 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
如何让python的运行速度得到提升
Jul 08 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 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
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php+highchats生成动态统计图
2014/05/21 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
django Admin文档生成器使用详解
2019/07/22 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
广告设计应届生求职信
2014/03/01 职场文书
淘宝店策划方案
2014/06/07 职场文书
迎国庆演讲稿
2014/09/15 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
导游词之昭君岛
2020/01/17 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python