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用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
FFrpc python客户端lib使用解析
Aug 24 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
python3.5的包存放的具体路径
Aug 16 Python
python 多态 协议 鸭子类型详解
Nov 27 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字符串函数学习之substr()
2015/03/27 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
JQuery 小练习(实例代码)
2009/08/07 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
答题辅助python代码实现
2018/01/16 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
求职意向书
2014/04/01 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
免职通知
2015/04/23 职场文书
文艺委员竞选稿
2015/11/19 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书