python实现排序算法解析
作者:不凡De老五 发布时间:2022-07-18 04:30:51
标签: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
来源:https://blog.csdn.net/weixin_38748717/article/details/79427316


猜你喜欢
- 前言今天给大家分析3个计算机视觉方向的Python实用代码,主要用到的库有:opencv-pythonnumpypillow要是大家所配置的
- 本文实例讲述了Python实现基于socket的udp传输与接收功能。分享给大家供大家参考,具体如下:udp的传输与接收windows网络调
- 概述在之前的风资源分析文章中,有提到过用widrose包来进行玫瑰图的绘制,目前的可视化绘图包有很多,但是最基础和底层的,本人认为还是mat
- mysql之alter表的SQL语句集合,包括增加、修改、删除字段,重命名表,添加、删除主键等。1:删除列ALTER TABLE 【表名字】
- 前言在搜集了很多文本语料之后,会开始漫长的数据清洗过程,通常要不断迭代。1. 问题描述有些文本数据中,会包含一些特殊符号。猜想可能是从某些富
- np.newaxisnp.newaxis 的功能是增加新的维度,但是要注意 np.newaxis 放的位置不同,产生的矩阵形状也不同。通常按
- 标志是一种简单的工具,就象铁锤,简单实用。如果一种工具功能太多导致其效用减弱,那就让它保持简单。你并不需要一把有太多装饰的精美铁锤。对于象征
- 本文实例讲述了Python基于socket模块实现UDP通信功能。分享给大家供大家参考,具体如下:一 代码1、接收端import socke
- 网页过渡是指当浏览者进入或离开网页时,页面呈现的不同的刷新效果,比如卷动、百叶窗等。这样你的网页看起来
- 今天以一个表单的自动提交,来进一步学习selenium的用法练习目标0)运用selenium启动firefox并载入指定页面(这部分可查看本
- SecureFile功能是oracle 11g中对大对象(LOB)存储格式的完全重新设计实现,原来的LOB存储格式现在通称为BASIXFIL
- 主要利用了setTimeout(),递归和String.substring();做出的效果就像是有一个打字员在打字.<!doctype
- 在Linux服务器管理中,内存是一个非常重要的资源。如果服务器的内存不足,可能会导致服务器崩溃或者无法正常工作。因此,检查Linux服务器内
- 组合框 Combobox 简介Combobox 可以翻译为组合框,这是tkinter.ttk 的 Widget控件,它的特性与OptionM
- 这篇文章主要介绍了如何使用Python破解ZIP或RAR压缩文件密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 在ubuntu论坛上看到一个抓取网页里的图片数据的帖子,于是就想着用GO语言来试下。那么先安装一个运行环境吧。以下安装方式在32位和64位的
- 一、下载软件1. 进入MySQL官网,登陆自己的Oracle账号(没有账号的自己注册一个),下载Mysql-5.7.17,下载地址:http
- 一、决策树的特点1.优点具有很好的解释性,模型可以生成可以理解的规则。可以发现特征的重要程度。模型的计算复杂度较低。2.缺点模型容易过拟合,
- 上一篇介绍了 HTML5 中 Canvas 的路径,这篇将要介绍一下 Canvas&nbs
- 汉字转为拼音的asp函数,原理:利用多维数组 1.添加索引 2.遍历数组Author: Unknowasp之家测试截图,呵呵不错:<%