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实现将不规范的英文名字首字母大写
Nov 15 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
用tensorflow搭建CNN的方法
Mar 05 Python
python list格式数据excel导出方法
Oct 31 Python
selenium+python截图不成功的解决方法
Jan 30 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Python多线程的退出控制实现
Aug 10 Python
如何基于Python实现word文档重新排版
Sep 29 Python
python爬取抖音视频的实例分析
Jan 19 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
Javascript调用C#代码
2011/01/17 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
Angular实现form自动布局
2016/01/28 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
vue实现购物车的监听
2020/04/20 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
中医药大学毕业生自荐信
2013/11/08 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
八年级数学教学反思
2016/02/17 职场文书
导游词之天津古文化街
2019/11/09 职场文书
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers