Pythonic版冒泡排序和快速排序(附:直接插入排序)
[本文出自天外归云的博客园]
冒泡排序:就是每次排序选最大元素到数组a的最后,排 len(a)-1 次。也就是两个for循环:
1. 外层是待排数组长度的循环,从待排数组长度(初始待排数组长度等于数组长度)到0的循环;
2. 内层是相邻元素比较的循环,从0到待排数组长度的循环。
快速排序:就是一个递归函数A,把数组中头元素做key,比key小的(包括相等的)放key左边,比key大的放key右边。再对左边和右边的子数组分别调用递归函数A。这是快排。
代码如下:
import random def bubble_show(func):
def wrapper(*args):
print(f"[{func.__name__}]")
random.shuffle(args[0])
print(f"Before {func.__name__}: {args[0]}")
r = func(*args)
print(f"After {func.__name__}: {r}")
return r return wrapper @bubble_show
# 冒泡排序
def bubble_sort(a):
for i in range(len(a))[::-1]:
for j in range(0, i):
(a[j], a[j + 1]) = (a[j + 1], a[j]) if a[j] >= a[j + 1] else (a[j], a[j + 1])
return a # 快速排序
quick_sort = lambda a: a if len(a) <= 1 else quick_sort([i for i in a[1:] if i <= a[0]]) + [a[0]] + quick_sort(
[i for i in a[1:] if i > a[0]]) if __name__ == '__main__':
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
bubble_sort(a) random.shuffle(a)
print("[quick_sort]")
print(f"Before quick sort: {a}")
print(f"After quick sort: {quick_sort(a)}")
代码量确实是非常少啊~!运行结果:

def insert_sort(numbers):
for i in range(1, len(numbers)):
key = numbers[i]
j = i - 1
while j >= 0:
if numbers[j] > key:
numbers[j + 1] = numbers[j]
numbers[j] = key
j -= 1 print(numbers)
return numbers
insert_sort(data)
Pythonic版冒泡排序和快速排序(附:直接插入排序)的更多相关文章
- JavaScript实现冒泡排序、快速排序、插入排序
JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51 来源: 作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)
一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...
- 交换排序:冒泡排序vs快速排序
在开发的过程中, 经常会遇到集合排序, 那么一般情况下, 我们都是使用list.OrderBy()的方式来排序, 也无需关注到里面算法的实现是个什么样子. 正好这几天准备回顾一下数据结构与算法. 首先 ...
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...
随机推荐
- mysql 查询 根据时分秒取数据 比如 取 时间为 8点半的 dateformat 时间函数转换
date_format(date,'%H') = 8 and date_format(date,'%i') = 30 SELECT * FROM `t_pda_trucklog` WHERE D ...
- Lomboz插件
2008年05月20日 星期二 下午 01:47 Lomboz是Eclipse的一个主要的开源插件(open-source plug-in),Lomboz插件能够使Java开发者更好的使用Eclips ...
- MySQL Cluster
MySQL Cluster MySQL集群一个非共享(shared nothing).分布式.分区系统,使用同步复制机制提供高可用和高性能. MySQL集群使用的是NDB引擎.NDB存储引擎会在节点间 ...
- SQL 中的 UNION 和UNION ALL 的区别
UNION表示“并”,当用的时候,系统会自动将重复的元组去掉,如果要保留重复元组则就用UNION ALL UNION 会合并重复数据,(由于要合并重复,该操所 隐藏着一个 排序的操作.)UNION A ...
- 一些http或https请求的参数,什么情况下需要urlencode编码
http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?name1=value1&na ...
- Python dict 出现 Key error
解决方法: https://www.polarxiong.com/archives/Python-%E6%93%8D%E4%BD%9Cdict%E6%97%B6%E9%81%BF%E5%85%8D%E ...
- iOS常用RGB颜色的色值表
常用RGB颜色表 R G B 值 R G B 值 R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 ...
- laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法
其实出现这个问题只会出现在laravel被部署在二级目录中,其原因是,除了请求根目录/ (http://www.xxx.com/public/),会请求public/index.php 你在浏览器输入 ...
- 请教Mysql如何删除 不包含 某些字符的记录
删除包含指定字符的记录 delete from `表` where `字段` like '%指定字符1%' or like '%指定字符2%' or like '%指定字符3%' 删除不包含指定字符的 ...
- php分享十五:php的数据库操作
一:术语解释: What is an Extension? API和扩展不能理解为一个东西,因为扩展不一定暴露一个api给用户 The PDO MySQL driver extension, for ...