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 fileinput模块使用介绍
Nov 30 Python
django基础之数据库操作方法(详解)
May 24 Python
Python自定义线程池实现方法分析
Feb 07 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
python3利用Socket实现通信的方法示例
May 06 Python
python中class的定义及使用教程
Sep 18 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 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 转义使用详解
2013/07/15 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
Javascript Math对象
2009/08/13 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
在python中画正态分布图像的实例
2019/07/08 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python 三元运算符使用解析
2019/09/16 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
博士研究生自我鉴定范文
2013/12/04 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
素质教育培训心得体会
2016/01/19 职场文书
如何书写邀请函?
2019/06/24 职场文书
基于python实现银行管理系统
2021/04/20 Python
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers