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守护进程(daemon)代码实例
Mar 06 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
浅谈function(函数)中的动态参数
Apr 30 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
Python实现时间序列可视化的方法
Aug 06 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
Python 中由 yield 实现异步操作
May 04 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Python面向对象之内置函数相关知识总结
Jun 24 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桌面中心(三) 修改数据库
2007/03/11 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP 文件系统详解
2012/09/13 PHP
PHP单例模式详细介绍
2015/07/01 PHP
php编程每天必学之验证码
2016/03/03 PHP
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python取余运算符知识点详解
2019/06/27 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
研究生毕业鉴定
2014/01/29 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
教师节宣传方案
2014/05/23 职场文书
清明节演讲稿
2014/05/27 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
Java后台生成图片的完整步骤
2021/08/04 Java/Android
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技