python实现排序算法解析

 更新时间:2018年09月08日 09:06:45   作者:不凡De老五  
这篇文章主要为大家详细介绍了python实现排序算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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可视化Dash工具之plotly基本图形示例详解

    关于Python可视化Dash工具之plotly基本图形示例详解

    这篇文章主要介绍了关于Python可视化Dash工具之plotly基本图形示例详解,需要的朋友可以参考下
    2021-03-03
  • 将字典转换为DataFrame并进行频次统计的方法

    将字典转换为DataFrame并进行频次统计的方法

    下面小编就为大家分享一篇将字典转换为DataFrame并进行频次统计的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python选择网卡发包及接收数据包

    Python选择网卡发包及接收数据包

    今天小编就为大家分享一篇关于Python选择网卡发包及接收数据包,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 基于PyInstaller各参数的含义说明

    基于PyInstaller各参数的含义说明

    这篇文章主要介绍了基于PyInstaller各参数的含义说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python访问纯真IP数据库脚本分享

    Python访问纯真IP数据库脚本分享

    这篇文章主要介绍了Python访问纯真IP数据库脚本分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-06-06
  • 基于Python fminunc 的替代方法

    基于Python fminunc 的替代方法

    今天小编就为大家分享一篇基于Python fminunc 的替代方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • PyQT中QTableWidget如何根据单元格内容设置自动宽度

    PyQT中QTableWidget如何根据单元格内容设置自动宽度

    这篇文章主要介绍了PyQT中QTableWidget如何根据单元格内容设置自动宽度问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python的条件控制 if 语句详解

    Python的条件控制 if 语句详解

    Python的 if 语句用来「控制代码」的执行,「判断条件成立」时执行一段代码,判断条件「不成立」时执行另一段代码,本文就给大家详细讲讲Python的条件控制 if 语句,需要的朋友可以参考下
    2023-08-08
  • 用Python实现协同过滤的教程

    用Python实现协同过滤的教程

    这篇文章主要介绍了用Python实现协同过滤的教程,主要用于从大数据中抽取用户信息偏好等等,需要的朋友可以参考下
    2015-04-04
  • Pycharm学习教程(1) 定制外观

    Pycharm学习教程(1) 定制外观

    这篇文章主要介绍了最全的Pycharm学习教程第一篇如何定制外观,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论