文章目录

  • 一、排序算法与时间复杂度
  • 二、冒泡排序

一、排序算法与时间复杂度

1、十大排序算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:

2、时间复杂度

  • 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。
  • 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;
  • O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。希尔排序
  • 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

3、排序的稳定性

  • 排序后 2 个相等键值的顺序和排序之前它们的顺序相同
  • 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。
  • 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

4、名词解释
n:数据规模
k:“桶”的个数
In-place:占用常数内存,不占用额外内存
Out-place:占用额外内存

二、冒泡排序

1、冒泡介绍
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

作为最简单的排序算法之一,冒泡排序就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。

2、算法步骤

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3、动图演示

4、Python练习

def bubbleSort(arr):for i in range(1, len(arr)):  # 第一层遍历每个数字for j in range(0, len(arr)-i):  # 第二层用第一层选中的数字来和其他数字进行比较if arr[j] > arr[j+1]:  # 满足条件,则交换顺序arr[j], arr[j + 1] = arr[j + 1], arr[j]return arr
a = [3,5,15,2,26,27,4,19,36,47,28,50,19,48,44]
bubbleSort(a)
print(a)

文章转载于:
十大经典排序算法(Python)

十大经典排序算法1(Python版本)相关推荐

  1. 按复杂度有效性递减排序_十大经典排序算法:python源码实现,通俗深入讲解

    概述 提示:本文上万字,陆陆续续疏理知识点加测试代码,耗时近一个月.阅读时长40分钟左右. 本文将十大经典排序算法进行汇总,从源码实现.复杂度.稳定性进行分析,并对每种排序的特性进行点评.对典型算法, ...

  2. 9个元素换6次达到排序序列_全面讲解十大经典排序算法(Python实现)

    作者 | hustcc 链接 | https://github.com/hustcc/JS-Sorting-Algorith 排序算法是<数据结构与算法>中最基本的算法之一.排序算法可以分 ...

  3. 十大经典排序算法3(Python版本)

    文章目录 四.希尔排序 五.归并排序 四.希尔排序 1.希尔介绍 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序是基于插入排序的以下两点性质而 ...

  4. 十大经典排序算法6(Python版本)

    文章目录 九.桶排序 十.基数排序 九.桶排序 1.桶排序介绍 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.为了使桶排序更加高效,我们需要做到这两点: 在 ...

  5. 十大经典排序算法5(Python版本)

    文章目录 七.堆排序 八.计数排序 七.堆排序 1.堆排序介绍 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键 ...

  6. 十大经典排序算法4(Python版本)

    文章目录 六.快速排序 六.快速排序 1.快速介绍 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这 ...

  7. 十大经典排序算法2(Python版本)

    文章目录 二.选择排序 三.插入排序 二.选择排序 1.选择介绍 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就 ...

  8. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  9. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

最新文章

  1. 解决eclipse修改后台代码ctrl+s总是【自动重启服务器】问题
  2. 7.7. 其他证书工具
  3. python 文件操作 os.listdir() 遍历文件
  4. 基于VHDL语言的数字秒表实现
  5. 设计费收费标准2002修订_@设计师,2019景观园林设计收费标准,注意查收!
  6. 二分查找及一般拓展总结
  7. java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译
  8. 腾讯外包php 面试,一道腾讯PHP程序员面试题,看下吧里有多少人做的出
  9. python脚本案例
  10. 指针数组vs数组指针 指针函数vs函数指针
  11. python怎么打出pi_随手写了段 Python,微信的地球居然转起来
  12. java 基本语法 二_java基础语法2
  13. access阿里云 mysql_如何使用access数据库
  14. Oracle定时任务使用
  15. html水平垂直居中
  16. SARS-CoV-2的近端起源
  17. 云呐|新兴行业中组织流程资产哪些的内容
  18. professional issue复习
  19. 互联网日报 | 4月26日 星期一 | 快手二次元日活跃用户突破1亿;小米全球范围内专利达1.9万件;艺龙酒店首家旗舰店在沪开业
  20. 电脑文件怎么显示后缀名

热门文章

  1. 在linux环境下com.aspose.words将word文件转为pdf后乱码,window环境下不会
  2. Elasticsearch-PHP requires cURL, or a custom HTTP handler.
  3. Power Designer快速的创建出数据集
  4. 304 ajax,ajax中304缓存处理
  5. java 内存指针_java内存模型详解
  6. mysql如何重复_mysql 处理重复数据
  7. 哪款浏览器速度最快_全球知名度非常高的火狐浏览器,它好在哪呢?
  8. 修改mac地址_交换机工作基础——MAC地址表的构成与安全
  9. css3 hover显示隐藏过渡,CSS3中 “hover” 样式 和 动画过渡 的问题。
  10. 虚拟机上的linux作为服务器吗,linux ftp服务器 虚拟机做服务器如何实现