[本文出自天外归云的博客园]

冒泡排序:就是每次排序选最大元素到数组a的最后,排 len(a)-1 次。也就是两个for循环:

  1. 外层是待排数组长度的循环,从待排数组长度(初始待排数组长度等于数组长度)到0的循环;

  2. 内层是相邻元素比较的循环,从0到待排数组长度的循环。

快速排序:就是一个递归函数A,把数组中头元素做key,比key小的(包括相等的)放key左边,比key大的放key右边。再对左边和右边的子数组分别调用递归函数A。这是快排。

代码如下:

import randomdef 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 rreturn 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)}")

代码量确实是非常少啊~!运行结果:

附:直接插入排序(不怎么pythonic,所以是附的)
def insert_sort(numbers):for i in range(1, len(numbers)):key = numbers[i]j = i - 1while j >= 0:if numbers[j] > key:numbers[j + 1] = numbers[j]numbers[j] = keyj -= 1print(numbers)return numbers

insert_sort(data)

Pythonic版冒泡排序和快速排序(附:直接插入排序)相关推荐

  1. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  2. c语言排序(快速排序,冒泡排序,选择排序,插入排序,桶排序)

    快速排序,冒泡排序,选择排序,插入排序,桶排序 文章目录 什么是排序 快速排序 实现流程 代码 改进版快速排序代码 注意点 冒泡排序 实现流程 实现代码 选择排序 实现代码 插入排序 实现代码 桶排序 ...

  3. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  4. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

    参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...

  5. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  6. 插入排序、希尔排序(Shell)、选择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序(桶排)的 时间复杂度和空间复杂度

    插入排序 希尔排序(Shell) 选择排序 堆排序 冒泡排序 快速排序 归并排序和基数排序(桶排) 的 时间复杂度(平均情况.平均情况和最坏情况)和 空间复杂度. 排序方法 名称 是否需要 比较关键字 ...

  7. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  8. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  9. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

最新文章

  1. 快速傅里叶变换(FFT)算法【详解】
  2. 裴礼文数学分析中的典型问题与方法第4章一元函数积分学练习
  3. [UE4]修改相机裁剪距离
  4. 进击的YOLOv3,目标检测网络的巅峰之作 | 内附实景大片
  5. vsphere入门之高可用性和双机热备
  6. php业务的适用场景,根据业务场景寻找合适解决方案(PHP)?
  7. i2c时序图的详细讲解_外脚手架及外架防护棚搭设详细讲解,附做法图
  8. 单因子测试用什么软件检查,如何进行单元测试?
  9. 利用python搭建socket server服务器
  10. 台式计算机usb口不能用,电脑usb接口不能用怎么办【图文教程】
  11. PPT背景色问题:白色变绿色?
  12. [渝粤教育] 华中科技大学 模拟电子技术基础 参考 资料
  13. iPad协议接口-稳定版
  14. 七夕节·烈火英雄·观后感
  15. 群晖NAS搭建web服务器,并发布公网可访问 3/4
  16. 简信CRM:在线crm这两个指标非常重要!
  17. Mybatis源码分析与技术原理
  18. jQuery流程图制作插件
  19. 服务器设计系列:内存管理
  20. java计算机毕业设计敬老院管理系统源程序+mysql+系统+lw文档+远程调试

热门文章

  1. linux基础: shell————正则表达式基础及sed
  2. 系统集成3月9日作业
  3. 前后台使用ajax传list的时候,用value[] 获取值
  4. linux定时任务Crond基础概念原理介绍01
  5. jbpm知识点——tasknode
  6. python画心形图像
  7. oracle10g sql跟踪,SQL性能的度量 - 语句级别的SQL跟踪autotrace
  8. 简单介绍Windows中将Nginx添加为服务的问题
  9. ASP.NET Web Pages – 帮助器简介
  10. 同学Linux,同成长