首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么插入排序冒泡排序更受欢迎?

插入排序冒泡排序时间复杂度 插入排序冒泡排序时间复杂度相同,都是 O(n2),在实际软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法? 2....插入排序时间复杂度最好就是有序所以是O(n),而最坏就是反序就是O(n2)。 4.为什么插入排序冒泡排序更受欢迎?...冒泡插入排序最好时间复杂度最坏时间复杂度都是O(n)O(n2),首先我们看一下冒泡排序当比对结果若前比后大则交换位置(从小到大排序时)因为需要交换位置所以需要进行三次赋值操作,而插入排序只需要一次赋值操作...,假如我们设每次赋值所需要时间为time那么冒泡每交换一次就是3*time,而插入则是time,可能在你觉得不就是三次赋值嘛,能消费多少性能,当然在数组排序量不大时,看不出来效果,当数组排序量很大?...如果实际开发中使用到排序在这两种算法之间进行选择的话,优先选择插入排序

83671

排序算法-上(Java语言实现)

思考题:插入排序冒泡排序时间复杂度相同,都是 image.png ,在实际软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法? 如何分析一个“排序算法”?...当某次冒泡操作已经没有数据交换时,说明已经达到完全有序,不用再继续执行后续冒泡操作。 冒泡排序算法原理比较容易理解,具体代码贴到下面,你可以结合着代码来看我前面讲原理。...解答开篇 基本知识都讲完了,我们来看开篇问题:冒泡排序插入排序时间复杂度都是 O(n2),都是原地排序算法为什么插入排序要比冒泡排序更受欢迎?...虽然冒泡排序插入排序在时间复杂度上是一样都是 O(n2),但是如果我们希望把性能优化做到极致,那肯定首选插入排序。插入排序算法思路也有很大优化空间,我们只是讲了最基础一种。...因此,这一节,带你分析了三种时间复杂度是 O(n2) 排序算法冒泡排序、插入排序选择排序

32820
您找到你想要的搜索结果了吗?
是的
没有找到

数据结构与算法学习笔记之如何分析一个排序算法

有很多时间复杂度相同排序算法,在实际编码,那又如何选择?下面我们带着问题一起学习一下。  正文 一、常见经典排序方法 (图片来自于一像素) 插入排序 ? 希尔排序(递减增量排序算法) ?...,在已排序区间中找到合适位置插入位置插入,并保证已排序区间数据一直有序,重复过程,直到未排序区间中没有元素 运行过程中看得出来,不需要额外存储空间,所以空间复杂度为0(1),也是原地排序算法 同样值元素...,前后顺序保持不变,是稳定排序算法 时间复杂度: 最好时间复杂度为O(n) 最坏时间复杂度为O(n2) 平均时间复杂度为O(n2) 代码实现: // 插入排序,a 表示数组,n 表示数组大小 public...八、选择排序插入排序时间复杂度相同,都是O(n^2),在实际软件开发为什么我们更倾向于使用插入排序而不是冒泡排序算法?...答:它们元素比较次数以及交换元素次数都是原始数据逆序度,是一个固定值,但是从代码实现上来看,冒泡排序数据交换要比插入排序数据移动要复杂,冒泡排序需要3个赋值操作,而插入排序只需要1个,他们 时间复杂度上都是

35330

算法分类 ,时间复杂度 ,空间复杂度,优

,这些都是新手入门必须要了解,你可以不会,但是你必须要知道他是怎么做到,原理是什么,今天就给大家讲一讲我们常用冒泡排序,选择排序,这两个排序算法, 1,冒泡排序(Bubble Sort), 为什么叫他冒泡排序...好了该上代码了,下面就是冒泡排序代码,冒泡相对于其他排序算法来说,比较简单,比较好理解,运算起来也是比较迅速,比较稳定,在工作也会经常用到,推荐使用 # 冒泡排序 def bubble_sort...N个元素进行排序,就会移动 1--N 次,在所有依靠移动元素来排序算法,选择排序是比较优秀一种 选择排序时间复杂度与稳定性: 最优时间复杂度: O(n2) 最坏时间复杂度:O(n2) 算法稳定性...O(n*m)     ,因为变量内存是自动分配,第一个定义是循环里面的,所以是n*O(1)   ,如果第二个循环在外边,那么就是1*O(1)     ,这里也只是一个了解性东西,如果工作很少用到...,那么没有必要深究,因为用真的很少 优化算法 这边带来了代码,你们在复制下来了python上运行一下,看一下用时间与不同, 自然就懂了, 这是未优化算法   '' 已知有a,b,c三个数,都是0-

69230

十大排序算法最详细讲解

我们看到嵌套循环,应该立马就可以得出这个算法时间复杂度为O(n2)。 冒泡优化 冒泡有一个最大问题就是这种算法不管不管你有序还是没序,闭着眼睛把你循环比较了再说。...至于选大还是选小,这个都无所谓,你也可以每次选择最大出来排,也可以每次选择最小出来排,只要你排序手段是这种方式,都叫选择排序。 ?...,都是O(n2) 插入排序 插入排序思想和我们打扑克摸牌时候一样,从牌堆里一张一张摸起来都是乱序,我们会把摸起来牌插入到左手中合适位置,让左手中牌时刻保持一个有序状态。...,5 这个数在 countArr[5] 值是 5 ,为什么是 5 ?我们来数数,排序数组应该是[ 2,3,4,5,5,8 ],5 排名是第五名,那 4 排名是第几名?...如果要排数据里有 0 ? int[] 初始化内容全是 0 ,排毛线。 如果要排数据范围比较大?比如[ 1,9999 ],排两个数你要创建一个 int[10000] 数组来计数?

53320

这或许是东半球分析十大排序算法最好一篇文章

我们看到嵌套循环,应该立马就可以得出这个算法时间复杂度为O(n2)。 冒泡优化 冒泡有一个最大问题就是这种算法不管不管你有序还是没序,闭着眼睛把你循环比较了再说。...,都是O(n2)。...,5 这个数在 countArr[5] 值是 5 ,为什么是 5 ?我们来数数,排序数组应该是[ 2,3,4,5,5,8 ],5 排名是第五名,那 4 排名是第几名?...如果要排数据里有 0 ? int[] 初始化内容全是 0 ,排毛线。 如果要排数据范围比较大?比如[ 1,9999 ],排两个数你要创建一个 int[10000] 数组来计数?...,这里使用 arrayList ,如果你使用 LinkedList 那其实也是没有问题

39620

这或许是东半球分析十大排序算法最好一篇文章

我们看到嵌套循环,应该立马就可以得出这个算法时间复杂度为O(n2)。 ▌冒泡优化 冒泡有一个最大问题就是这种算法不管不管你有序还是没序,闭着眼睛把你循环比较了再说。...,都是O(n2)。...,5 这个数在 countArr[5] 值是 5 ,为什么是 5 ?我们来数数,排序数组应该是[ 2,3,4,5,5,8 ],5 排名是第五名,那 4 排名是第几名?...如果要排数据里有 0 ? int[] 初始化内容全是 0 ,排毛线。 如果要排数据范围比较大?比如[ 1,9999 ],排两个数你要创建一个 int[10000] 数组来计数?...,这里使用 arrayList ,如果你使用 LinkedList 那其实也是没有问题

43010

这或许是东半球分析十大排序算法最好一篇文章

我们看到嵌套循环,应该立马就可以得出这个算法时间复杂度为O(n2)。 冒泡优化 冒泡有一个最大问题就是这种算法不管不管你有序还是没序,闭着眼睛把你循环比较了再说。...,都是O(n2)。...,5 这个数在 countArr[5] 值是 5 ,为什么是 5 ?我们来数数,排序数组应该是[ 2,3,4,5,5,8 ],5 排名是第五名,那 4 排名是第几名?...如果要排数据里有 0 ? int[] 初始化内容全是 0 ,排毛线。 如果要排数据范围比较大?比如[ 1,9999 ],排两个数你要创建一个 int[10000] 数组来计数?...,这里使用 arrayList ,如果你使用 LinkedList 那其实也是没有问题

54750

温故而知新:对排序算法新认识

后来在大四以及此后硕士项目过程真有用到排序算法,不过当时图方便,而且数据量不大,使用冒泡排序(编码简单)。之后与排序算法结缘,是准备秋招。...为了考试,为了项目,为了秋招,回顾这几次与排序算法近距离接触,没有真正理解各类排序算法原理。 求解数组逆序对 这两天看到一道题目:求解数组逆序对。...),还有些时间复杂度为O(n2)排序算法,比如冒泡排序选择排序、插入排序希尔排序)。...一提到O(n2),就感觉这类算法很low,不高级,不优雅。 其实不是。前几次接触排序算法都是从时间复杂度为O(n2)排序算法起步。...bobo总结得很好,为什么要学习O(n2)排序算法: 基础 编码简单,易于实现,是一些简单情景首选 简单排序算法思想衍生出复杂排序算法 作为子过程,改进更复杂排序算法 一些O(n2)排序算法

21720

Java数据结构算法(三)——冒泡选择、插入排序算法

1、冒泡排序   这个名词由来很好理解,一般河水中冒泡,水底刚冒出来时候是比较小,随着慢慢向水面浮起会逐渐增大,这物理规律不作过多解释,大家只需要了解即可。   ...交换比较次数都N2 成正比。由于常数不算大 O 表示法,忽略 2 4,那么冒泡排序运行都需要 O(N2) 时间级别。   ...当 N 值很大时,比较次数是主要,所以冒泡排序一样,用大O表示是O(N2) 时间级别。但是由于选择排序交换次数少,所以选择排序无疑是比冒泡排序。...这里需要注意是,如果要进行逆序排列,那么每次比较移动都会进行,这时候并不会比冒泡排序快。 4、总结   上面讲三种排序冒泡选择、插入用大 O 表示法都需要 O(N2) 时间级别。...一般不会选择冒泡排序,虽然冒泡排序书写是最简单,但是平均性能是没有选择排序插入排序。   选择排序把交换次数降低到最低,但是比较次数还是挺大

1.1K81

PHP数据结构-交换排序冒泡、快排(有彩蛋)

不管是冒泡、还是快排,都是面试常见排序算法,常见到什么地步?但凡学习数据结构算法,甚至是你完全没有学习过,也多少都会听说过这两个排序算法。...而一些大中型公司更是直接在面试题中指明不要使用这两种算法来实现一些排序题目,这又是为什么?那当然也是因为这两个算法实在是太出名了,很多人都随便就能手写出来。...其实关于冒泡排序算法,还有一个口决是很多同学都知道,也可以帮助我们记忆。 外层循环 N 减一 内层循环 N 减一减 I 两两相比小靠前(正序) 为什么靠前是正序?...冒泡时间复杂度其实很明显地就能看出来O(N2)。属于效率一般但非常好理解一种算法,而且它是一个稳定排序算法。 快速排序 冒泡感觉咋样?...那么没有什么别的方法能够对冒泡进行优化?有大佬就发明出了优化冒泡一种排序算法啦。那就是快速排序算法。还记得在学习查找时候我们学习过二分查找吗?

65730

JavaScript 数据结构与算法之美 - 冒泡排序、插入排序选择排序

之所以把冒泡排序选择排序、插入排序放在一起比较,是因为它们平均时间复杂度都为 O(n2)。 请大家带着问题:为什么插入排序冒泡排序更受欢迎 ?来阅读下文。 2....时间空间复杂度详解,请看 JavaScript 数据结构与算法之美 - 时间空间复杂度。 学习排序算法,我们除了学习它算法原理、代码实现之外,更重要是要学会如何评价、分析一个排序算法。...比较次数交换(或移动)次数 这一节下一节讲都是基于比较排序算法。基于比较排序算法执行过程,会涉及两种操作,一种是元素比较大小,另一种是元素交换或移动。...选择排序空间复杂度为 O(1),是一种原地排序算法。 第二,选择排序是稳定排序算法吗 ? 选择排序每次都要找剩余未排序元素最小值,并和前面的元素交换位置,这样破坏了稳定性。...解答开篇 为什么插入排序冒泡排序更受欢迎 ? 冒泡排序插入排序时间复杂度都是 O(n2),都是原地排序算法为什么插入排序要比冒泡排序更受欢迎 ? 这里关乎到 逆序度、满有序度、有序度。

77920

排序算法一览(上):交换类、选择插入类排序

(Gnome Sort) 也叫地精排序、Stupid Sort,号称写出来最简单排序代码,它很像冒泡,也是通过一系列元素交换完成。...圈排序最好最坏时间复杂度都是 O(n2),但是因为最小写入次数,对于在写入非常慢介质中排序来说,会有它价值(例如在某些 Flash 闪存)。...原始算法实现在最坏情况下需要进行 O(n2) 比较交换。希尔排序可以使得性能提升至 O(n*log2n)。这比最好比较算法 O(n*logn) 要差一些。...如果用复杂度为 O(n2) 排序冒泡排序或插入排序),可能会进行 n 次比较交换才能将该数据移至正确位置。而希尔排序会用较大步长移动数据,所以小数据只需进行少数比较交换即可到正确位置。...其最差时间复杂度为 O(n2)。该组数值如果已经是自小至大有序,则构造出来二叉查找树所有节点都没有左子树。自平衡二叉查找树可以克服上述缺点,时间复杂度为 O(nlogn)。

42110

排序算法第一篇-排序算法介绍

排序算法第一篇-排序算法介绍 在面试,现在无论大小公司都会有算法。其中排序算法也是一种很常见面试题。比如冒泡,快排等。这些,排序算法自己看了一次又一次,可是过一段时间,又忘掉了。...如:冒泡、快排等这些算法都是内部排序 2.2:外部排序 数据量过大,无法全部加载到内存,需要借助于外部存储进行排序。 如:数据库数据8个G,内存只有4个G这种。...为什么?请看下面四个函数,随着n增大而增大运行时间。...如果O(n)代码再嵌套循环一遍,它时间复杂度就是O(n2), 上图中代码起始就是嵌套了2层n循环,它时间复杂度就是O(n*n),即时O(n2)。...下节预告: 下节我们将讲讲冒泡排序选择排序。使用是图解+代码一步一步推导出来演示。欢迎大家一起学习。

40600

【小算法冒泡排序

冒泡排序是大多学人学到第一个排序,教科书上在众多排序算法选择它作为示例,想还是因为它够简单,易于理解吧。 假设有下面一组数据,需要从小到大升序排列。 冒泡排序算法是 1....从左到右,依次比较相邻两个位置数据,如果左边数值较大,就交换它们,这样在单轮操作,最大数会交换到最右边。 2. 重复多轮操作,重复次数和数组长度相同。 3. 排序完成。...也许有同学会问,j 取值为什么是 size - i - 1 ? 每次冒泡排序后,因为最右边数字是排序,所以每一轮操作实际上会变少。...至于为什么减去 1 ,这是因为防止数组索引溢出,每次用 j 做下标,与 j+1 下标比较,要确定 j+1 索引不会超出范围。 另外,还使用了不借助第三个变量,交换两个变量技巧。...时间复杂度 冒泡排序时间复杂度是 O(n2)O(n^2)O(n2)

39730

一文搞定冒泡排序算法

O(n^2) (4) O(n^3) (5) O(lg n) (6) O(n lg n) (7) O(2^n) 7、附:常用排序算法时间复杂度空间复杂度 二、小郑有话说 一、冒泡排序 1、冒泡排序原理...A.length趟排序  如果有6个元素要排序那么就需要6次 for (int i = 0; i < A.length; i++) { //第二层循环为什么是...{ public static int[] sort(int A[]){ //一共冒泡A.length趟排序  如果有6个元素要排序那么就需要6次 for...分析算法时间复杂度,通常都是分析最坏时间复杂度情况。...(6) O(n lg n) 在排序中经常见到 (7) O(2^n) 指数级 7、附:常用排序算法时间复杂度空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n

83230

动态可视化十大排序算法冒泡排序

冒泡排序 接下来,我们就来看一看冒泡排序算法,前面的动画不知道你看懂了吗?没看懂的话可以再看一遍。 但是看懂就代表你可以写出完整代码来吗?答案并不一定哦。 话不多说,先看下代码: #!...如何评价一个排序算法? 通过上面的程序,我们就实现了冒泡排序算法那么如何评价一个排序算法想这个你在学习数据结构与算法时候一定都学过。...主要有以下指标: 时间复杂度 空间复杂度 稳定性 这里就不再一一叙述了,冒泡排序算法时间复杂度是 O(n2),空间复杂度是 O(1),是稳定排序算法。...优化 时间复杂度是 O(n2) 排序算法是比较耗时,适用于小规模数据,不适用于大规模数据排序,那有没有优化方法? 要想从时间复杂度量级上优化,这个就只能换排序算法了。但是?...总结 冒泡排序是一种时间复杂度较高排序算法,所以大部分时候都是在教科书中出现,在实际项目或者使用过程很少有它身影。

63630

Python笔记:排序算法整理

所以,这里,我们就简单整理一下一些常用排序算法,具体包括: 选择排序 冒泡排序 快速排序排序 归并排序 2. 具体排序算法考察 1....冒泡排序 冒泡排序也是最常使用排序算法之一,其核心思路顾名思义,就是在每一次遍历,将大元素往后移动,从而实现最终排序。...N^2) O(N2),但是,不同于选择排序,由于冒泡排序一直在对元素进行移动,因此有一定概率会在中途就达到顺序情况,从而跳出循环,因此,冒泡排序效率上会略高于选择排序...堆排序排序核心是采用堆结构,有关python堆结构使用可以参看之前之前写一篇博客Python笔记:heapq库简介,里面有介绍python堆结构实现,自己也在里面实现了一遍,因此这里就不再赘述这部分内容了...,如果读者有兴趣的话可以看一下下述参考链接内容,个人觉得他讲还是蛮好

32630

重学数据结构算法(四)之冒泡排序、插入排序选择排序

原地排序算法,就是特指空间复杂度是 O(1) 排序算法冒泡、插入、选择都是原地排序算法排序算法稳定性 针对排序算法,我们还有一个重要度量指标,稳定性。...这个概念是说,如果排序序列存在值相等元素,经过排序之后,相等元素之间原有的先后顺序不变。 通过一个例子来解释一下。...{ break; } } a[j+1] = value; // 插入数据 } } 插入排序冒泡排序时间复杂度相同,都是 O(n2),在实际软件开发里...,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法?...} 希尔排序O(n^1.3)) 希尔排序也是一种插入排序,它是简单插入排序经过改进之后一个更高效版本,也称为缩小增量排序,同时该算法是冲破O(n2第一批算法之一。

72930

十大经典排序算法 -- 动图讲解

但这种改进对于提升性能来说并没有什么太大作用。 算法分析 最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2) 算法步骤 1....选择排序 选择排序是一种简单直观排序算法,无论什么数据进去都是 O(n²) 时间复杂度。所以用到它时候,数据规模越小越好。唯一好处可能就是不占用额外内存空间了吧。...插入排序 插入排序代码实现虽然没有冒泡排序选择排序那么简单粗暴,但它原理应该是最容易理解了,因为只要打过扑克牌的人都应该能够秒懂。...插入排序是一种最简单直观排序算法,它工作原理是通过构建有序序列,对于未排序数据,在已排序序列从后向前扫描,找到相应位置并插入。 插入排序冒泡排序一样,也有一种优化算法,叫做拆半插入。...选择排序一样,归并排序性能不受输入数据影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 时间复杂度。代价是需要额外内存空间。

1.3K50
领券