python实现排序算法解析

作者:不凡De老五 时间:2022-07-18 04:30:51 

本文实例为大家分享了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实现排序算法解析

来源:https://blog.csdn.net/weixin_38748717/article/details/79427316

标签:python,排序算法
0
投稿

猜你喜欢

  • Asp WinHttp.WinHttpRequest.5.1 对象使用详解

    2012-05-02 10:15:27
  • 回调函数的意义以及python实现实例

    2021-07-17 11:42:07
  • python 阿里云oss实现直传签名与回调验证的示例方法

    2021-12-08 00:30:18
  • python使用xlrd模块读写Excel文件的方法

    2022-02-14 16:54:55
  • Python selenium页面加载慢超时的解决方案

    2022-10-15 04:37:43
  • Python函数式编程实现登录注册功能

    2022-02-16 14:03:31
  • asp删除mssql数据库中没有记录的图片代码

    2011-03-11 11:22:00
  • ThinkPHP中__initialize()和类的构造函数__construct()用法分析

    2023-07-08 01:26:24
  • ASP编程入门进阶教程

    2008-06-29 18:00:00
  • css:小技巧大问题,cellSpacing用css样式代替方法,其它样式类似解决!

    2009-10-04 20:35:00
  • Tensorflow全局设置可见GPU编号操作

    2021-04-21 12:41:46
  • Python yield生成器和return对比代码实例

    2022-07-17 21:54:57
  • Python3.7安装keras和TensorFlow的教程图解

    2022-09-05 13:23:00
  • 基于python读取.mat文件并取出信息

    2021-10-24 12:06:26
  • 在import scipy.misc 后找不到 imsave的解决方案

    2023-08-09 05:21:45
  • python flask之模板继承方式

    2022-05-26 03:38:24
  • python实现单例的两种方法解读

    2022-04-10 21:10:46
  • MYSQL数据库表设计与优化(二)

    2010-10-25 20:12:00
  • 如何对Oracle8数据库进行维护?

    2009-11-20 18:01:00
  • 深入了解MySQL的数据类型以及建库策略

    2008-12-17 16:16:00
  • asp之家 网络编程 m.aspxhome.com