周末无事,带娃之余看到娃娃在算数,想到了排序~尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang、PHP和JS三种语言来实现下。

常见的基于选择的排序算法有冒泡排序、插入排序、选择排序、归并排序和快速排序。选择排序算法通常会根据以下几个纬度来考虑:

  • 时间复杂度

  • 空间复杂度

  • 算法的稳定性(待排序序列中有值相等的元素,经过排序之后相等元素之间原有的顺序不变)

时间复杂度和空间复杂度

时间复杂度表示代码执行时间随数据规模增长的变化趋势

几种常见的复杂度量级如下:

空间复杂度表示算法的存储空间与数据规模之间的增长关系

冒泡排序算法

冒泡排序只会操作相邻的两个数据。每次操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。

通过一个例子给大家看下冒泡的过程。我们要对一组数据 4,5,6,3,2,1,从小到到大进行排序,第一次排序的过程如下:

经过 n 次冒泡,所有元素都在自己应该的位置上,如下图:

Go示例:

package main// a是数组,n是数组长度func BubbleSort(a []int, n int) {  if n <= 1 {    return  }  for i := 0; i < n; i++ {    flag := false    for j := 0; j 1; j++ {      if a[j] > a[j+1] {        a[j], a[j+1] = a[j+1], a[j]        flag = true      }    }    if !flag {      break    }  }}

PHP示例:

function bubbleSort($arr) {    if (count($arr) <= 1) {        return $arr;    }    for ($i =  0; $i < count($arr); $i++) {        $flag = false;        for($j = 0; $j < count($arr) - $i - 1; $j++) {            if ($arr[$j] > $arr[$j + 1]) {                $temp = $arr[$j];                $arr[$j] = $arr[$j + 1];                $arr[$j + 1] = $temp;                $flag = true;            }        }        if (!$flag) {            break;        }    }    return $arr;}

性能分析

最后我们看下冒泡排序的性能和稳定性:

  1. 时间复杂度:O(n2)

  2. 空间复杂度:只交换相邻元素,只需要常量级的临时空间,是原地排序算法

  3. 算法稳定性:相等元素不会交换顺序,是稳定的排序算法

扬帆将远航,点个在看呗~

冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序相关推荐

  1. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

    一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...

  2. 冒泡和快速排序的时间复杂度_各种排序算法总结

    各种排序算法的稳定性,时间复杂度和空间复杂度总结: 我们比较时间复杂度函数的情况: 时间复杂度函数O(n)的增长情况: 所以对于n较大的排序记,一般的选择都是时间复杂度为O(nlog2n)的排序方法. ...

  3. golang 排序_常用排序算法之冒泡排序

    周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...

  4. 冒泡和快速排序的时间复杂度_「排序」冒泡排序、快速排序—图解+手撕

    前言 无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习交换类排序--冒泡和快排详解! 在排序中,冒泡和快排是考 ...

  5. 冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...

    八大排序算法 一.直接插入 1.基本思路 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环 ...

  6. 冒泡和快速排序的时间复杂度_三分钟快速记住冒泡排序算法

    冒泡排序名字由来: 是因为越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名"冒泡排序". ...

  7. 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  8. 冒泡和快速排序的时间复杂度_十大经典排序算法——快速排序

    目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a ...

  9. 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)

    本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...

最新文章

  1. spark编程mysql数据源_Spark - 直接操作数据源 MySQL
  2. AndroidStudio中提示:Didn‘t find class “android.support.v7.widget.RecyclerView“
  3. mysql经典面试题
  4. iOS 之UITextFiled/UITextView小结
  5. 人人都在讨论的大数据,你了解吗?
  6. 一文读懂 | 进程怎么绑定 CPU
  7. java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
  8. linux简介及安装使用
  9. 微信公众号编辑模式下推送消息
  10. 将m3u8文件转MP4、TS、flv、mkv等文件
  11. Oracle10g卡顿,192MB内存运行win10 系统启动大约3分钟响应非常慢
  12. SolidWorks 2023软件安装教程SW2023软件安装包
  13. 趣味三角——第2章——弦
  14. 802.11ax简要笔记
  15. lib/python3.7/site-packages/torch/lib/../../../../libgomp.so.1: version `GOMP_4.0‘ not found (requir
  16. LeetCode 二分查找
  17. ext4 extent详解2之内核源码详解
  18. 学习python的第六天
  19. 从网页下载4399小游戏 下载flash游戏
  20. PHP给源代码加密的几种方法

热门文章

  1. 【图片新闻】2019年6月19日伊朗击落一架美军MQ-4 Triton无人侦察机
  2. 蓝牙低功耗CC2640R2F+W5500SPI通信
  3. sony的故事 第 2 章
  4. JDK7中HashMap源码分析
  5. 猿创征文 | 一文看懂!无人机集群半物理仿真系统的7大模块拆解,超详细!
  6. windows下安装redis5
  7. 高活性高选择性 PAK4 抑制剂的发现
  8. 微信浏览器禁止app下载链接的两种处理方法-NiceTool
  9. 排序之partion函数
  10. Ubuntu配置nginx