冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序
周末无事,带娃之余看到娃娃在算数,想到了排序~尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用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;}
性能分析
最后我们看下冒泡排序的性能和稳定性:
时间复杂度:O(n2)
空间复杂度:只交换相邻元素,只需要常量级的临时空间,是原地排序算法
算法稳定性:相等元素不会交换顺序,是稳定的排序算法
扬帆将远航,点个在看呗~
冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序相关推荐
- 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...
- 冒泡和快速排序的时间复杂度_各种排序算法总结
各种排序算法的稳定性,时间复杂度和空间复杂度总结: 我们比较时间复杂度函数的情况: 时间复杂度函数O(n)的增长情况: 所以对于n较大的排序记,一般的选择都是时间复杂度为O(nlog2n)的排序方法. ...
- golang 排序_常用排序算法之冒泡排序
周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...
- 冒泡和快速排序的时间复杂度_「排序」冒泡排序、快速排序—图解+手撕
前言 无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习交换类排序--冒泡和快排详解! 在排序中,冒泡和快排是考 ...
- 冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...
八大排序算法 一.直接插入 1.基本思路 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环 ...
- 冒泡和快速排序的时间复杂度_三分钟快速记住冒泡排序算法
冒泡排序名字由来: 是因为越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名"冒泡排序". ...
- 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 冒泡和快速排序的时间复杂度_十大经典排序算法——快速排序
目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a ...
- 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)
本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...
最新文章
- spark编程mysql数据源_Spark - 直接操作数据源 MySQL
- AndroidStudio中提示:Didn‘t find class “android.support.v7.widget.RecyclerView“
- mysql经典面试题
- iOS 之UITextFiled/UITextView小结
- 人人都在讨论的大数据,你了解吗?
- 一文读懂 | 进程怎么绑定 CPU
- java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
- linux简介及安装使用
- 微信公众号编辑模式下推送消息
- 将m3u8文件转MP4、TS、flv、mkv等文件
- Oracle10g卡顿,192MB内存运行win10 系统启动大约3分钟响应非常慢
- SolidWorks 2023软件安装教程SW2023软件安装包
- 趣味三角——第2章——弦
- 802.11ax简要笔记
- lib/python3.7/site-packages/torch/lib/../../../../libgomp.so.1: version `GOMP_4.0‘ not found (requir
- LeetCode 二分查找
- ext4 extent详解2之内核源码详解
- 学习python的第六天
- 从网页下载4399小游戏 下载flash游戏
- PHP给源代码加密的几种方法