首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

JS手撕(十) 冒泡排序、插入排序

JS手撕(十)    冒泡排序、插入排序 冒泡排序 原理 冒泡排序原理就是依次比较相邻元素,如果前面的比后面的大,那就互换位置。从第一对比到最后一对。...下面的动图来自于菜鸟教程(贴出来主要是为了更好的理解) JS实现 实现: function bubbleSort(arr) { const len = arr.length; for (let...:稳定 注:排序稳定性指的是大小相同的两个值在排序前和排序后的先后顺序是否不变。...(如果待插入元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面,这是为了让插入排序是稳定的) JS实现 function insertSort(arr) { const len =.../sort.js'); let arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 26, 4, 19, 50, 48]; console.log(insertSort

1K10

js 实现冒泡排序及优化方案

// 冒泡排序 // 原理就是每一轮循环,将一个最大的值放冒泡到最后 // 1.每一趟都是比较相邻两个元素,如果后一个元素大于前一个,则交换两个元素 // 2.第一趟从第一个元素开始进行交换,最后一个元素不参与交换...则代表排好了几个元素 for (let j = 0; j < arr.length - 1 - i; j++) { // 在大于的时候才会交换,等于的时候不交换,所以冒泡排序属于稳定排序算法...; } } } console.log(`执行了${count}趟循环`); return arr; } console.log("普通冒泡排序...则代表排好了几个元素 for (let j = 0; j < arr.length - 1 - i; j++) { // 在大于的时候才会交换,等于的时候不交换,所以冒泡排序属于稳定排序算法...排了多少趟,则代表排好了几个元素 for (let j = 0; j < sortBorder; j++) { // 在大于的时候才会交换,等于的时候不交换,所以冒泡排序属于稳定排序算法

63230

前端也学算法:JS版常见排序算法-冒泡,插入,快排,归并

排序是很常见也很经典的问题,下面讲几种排序算法: 冒泡排序 冒泡排序是最好理解的一种算法,以升序排序为例,即最小的在前面,对数组进行一次遍历,如果相邻的两个数前面的比后面的大,则交换他们的位置,第一次遍历会将最大的数字排到最后去...会打扑克的同学应该很熟悉这个排序法,每次摸牌的时候都去手里面已经排好序的牌里面比较下,找到它的位置,插入进去。...快速排序是一个效率很高而且面试中经常出现的排序,他的平均时间复杂度是O(nlogn),最差时间复杂度是O(n^2)。...归并排序比快速排序好理解,时间复杂度也是O(nlogn),采用的思想也是分治法。...console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9] 原创不易,每篇文章都耗费了作者大量的时间和心血,如果本文对你有帮助,请点赞支持作者,也让更多人看到本文

47351

js实现常用排序算法 --冒泡排序,选择排序, 插入排序,快速排序,

JavaScript实现十大常用排序算法 冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排序排序 计数排序排序 计数排序 冒泡排序: 原理 选择排序: 原理: 第一次从待排序的数据元素中选出最小...以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。...:${arr}`) } return arr } let res = selectSort([2,5,3,7,5,9,3,5,7,2,1]) console.log(`最终排序结果${res}`...) 执行结果如下 插入排序 原理: 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。...:${arr}`) } } let res = insertionSort([2,5,3,7,5,9,3,5,7,2,1]) console.log(`最终结果${res}`) 执行结果 执行过程动态

2K20

js算法初窥01(排序算法01-冒泡、选择、插入)

这篇文章会介绍一些简单常用的排序算法,比如我们耳熟详的冒泡排序,以及选择排序、插入排序、归并排序等等等等。当然,你一旦学会了这些算法在js中的实现方式,其实你也就弄懂了这种算法。...下面我们为这个数组类添加各种排序方法。我们先从最简单的开始。 1、冒泡排序   冒泡排序十分简单,就是比较数组中任何两个相邻的元素,如果第一个比第二个大,那么就交换两个元素的位置。...// 但是你把次数减得更少就不行了,排序结果就不对了(其实这里可以合理的减少内层循环的次数,后面说)。你还可以这么理解,外层循环控制我们有多少个数需要比较,内层循环去具体的操作两个数的比较。...1]) { swap(array,j,j+1); } } } };   改进后的冒泡排序我们也学会了...冒泡排序,是最基础的,最不推荐的排序方式。因为它的时间复杂度是O(n2),大O表示法,我们会在后面的内容中详细的讲解什么是大O表示法。

30410

冒泡算法还简单的排序算法:看起来满是bug的程序,居然是对的

明敏 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 程序bug也负负得正吗? 还真可以。 比如程序员们再熟悉不过的排序算法,通过两个“bug”居然歪打正着,实在令人匪夷所思。...△冒泡算法 但如果你真的运行一下会发现,结果还真的是按照升序排列的。...我们再来看一下正确的冒泡算法代码是怎样的: for i = 1 to n dofor j = i + 1 to n doif A[i] > A[j] thenswap A[i] and A[j]...最后,Pₙ就是升序排序算法执行完以后的结果。 由于内外两组循环没有任何范围差别,因此这可以说是“最简单”的排序算法了。...这样等所有线程都醒来,排序就结束了。 但和作者提出的算法一样,睡眠排序由于多线程的问题,在真正实现上也有困难。 此外,这位网友也表示自己看到过这种算法: 我确定我此前看到过这种算法,它没有名字吗?

24220

冒泡排序

我们总结出一个规律就是从池塘底部到池塘表面它的气泡是由小到大排列的,诸如此类的排序,我们可以将其称之为冒泡排序。...通过查阅相关资料,sort的默认排序顺序是将元素转换成字符串,然后比较它们的UTF-16代码单元值序列时构建的。 怎么办? 这肯定不是我想要的结果啊。...实现一个冒泡排序 需求: 实现一个冒泡排序算法,可以根据输入数据进行升序降序排列,输入的参数是一个数组arr和一个boolean类型的asc,默认为true。...如何优化冒泡排序? 写出上面的答案我们似乎看到胜利的苗头,嘿嘿嘿。那我们再从性能上看看有没有什么好的办法可以优化下的,两层遍历其算法复杂度为O(n^2),显然数据量大的时候不可取啊。...(常规写法),bubble_good.test.js(优化写法),bubble_log.test.js(日志记录写法)。

41520

【数据结构与算法】简单排序冒泡排序、选择排序、插入排序)完整思路

,我们都会简单来判断一下它们的时间复杂度,并用大O表示法来表示 二、冒泡排序 冒泡排序是一种最简单粗暴的排序算法,它的排序方式跟它的名字一样,一个个数据往上冒出来。...:O(n²) 冒泡排序的交换次数:O(n²) 三、选择排序 选择排序冒泡排序非常类似,唯一的区别就是选择排序每次遍历时,将各个元素比较,将最大值或最小值的索引存放在一个变量中,全部比较完了以后,再将该索引上的元素进行就交换...简单来说就是选择排序是每次遍历交换一次,而冒泡排序每次遍历需要交换多次,因此选择排序一般来说是要比冒泡排序效率高一点的。 同样的,我们来看一下选择排序(从小到大排序)的动图展示: ?...] 在了解了选择排序冒泡排序的区别后,我们应该清楚得知道,选择排序的比较次数跟冒泡排序一样,因此选择排序的比较次数用大O表示法表示为 O(n²) 选择排序每遍历一次数组,就只需要交换一次数据,因此其交换次数用大...首先,我们把索引为0的元素看作区域,该区域是有序的,因为就只有一个元素,怎样排序都是它一个元素,所以就认为它是有序的。

39010

3-5年的PHPer常见的面试题

看到有很多,的总结一下,比较适合有一定经验的PHPer 平时喜欢哪些php书籍及博客?CSDN、虎嗅、猎云 js闭包是什么,原型链了不了解? for与foreach哪个更快? php鸟哥是谁?...Node.js彻底代替php+apache 吗? 怎样判断一个值是否存在于数组中?in_array(),array_key_exists 哪一个更好 怎样判断select语句中是否使用了索引?...linux网络优化,如何查看进程、怎样查看最大文件打开数? 1条微薄要推送给100万个粉丝该怎么处理? 知道哪些算法?冒泡排序?快速排序?二分查找法?...nginx设置缓存js、css、图片等信息,缓存的实现原理是? nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现? nginx 实战优化业务功能 ? 谈一下近三年来你的得意之作?...给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现? 对10G的文件进行查找如何实现? 统计10G文件每个关键字出现的次数如何实现?

1.3K100

2018春招前端面经集合

在牛客网潜伏了这么久,看了不少的面经,一直想着什么时候也发一波面经,好啦,现在春招结束了,论文写完了,答辩结束了,就等毕业上岗了,最近呆宿舍开始反思自己的春招,是时候该总结一波了。...事件委托 Js中_proto_,说一下原型链 水平垂直居中实现 Flex布局 了解哪些设计模式 说一下稳定和不稳定的排序有哪些 快排时间复杂度,基准元素选择的优化 (三)Hr面20180408...) 事件循环 ajax原生写法 Promise给出例子说出对应的结果 input实现勾选 深拷贝 js中this 算法原理 http和https区别,https是否绝对安全 水平垂直居中...20180508 Vue生命周期 Vue双向绑定的实现 说一下promise,then调用返回的是新的还是旧的对象 水平垂直居中 只有一个DOM元素,用CSS的方式实现两色效果 一个数组只有1和2,排序...,1在前面,2在后面 JS的事件模型,捕获和冒泡,阻止冒泡 preventDefault和stopPropagation区别 之后发了个邮件让三十分钟内做三道代码题:一道是刚刚那个算法题;另一个是实现

96050

前端面试题整理

es是js的各个版本。 javascript与ECMAScript、DOM、BOM的关系 闭包主要解决什么问题?...block,position,absolute,left:50%,right:50%,transform:translate(-50%,-50%)} 对数组[1,2,1,6,7,-2,4,0,6]按从大到小排序...答: 冒泡排序-----从小到大排序,存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序...在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去.冒泡排序最坏情况的时间复杂度是O(n²) 经典排序算法 - 冒泡排序Bubble sort 使用Jquery遍历class等于lock的标签...CSS 布局经典问题初步整理 怎样对网站文件和资源进行优化 答: 1.尽可能减少http请求次数,将css, js, 图片各自合并 2.使用CDN,降低通信距离 3.添加Expire/Cache-Control

1.7K21

爆料算法刷题日记 Day1;布置 Day2 算法题

第一道题目前星球内提交作业 90 多人次:作业榜第一名上午时被点赞就11次,总结算法的两个优化点,代码也很简洁,确实值得赞: 提交作业的代码有人使用Python,有c/c++ ,有java,有 Lua,还有 js...print(bubble_sort([1,2,3,5,4,6,7,8,9])) 完全有序 print(bubble_sort([1,2,3,4,5,6,7,8,9])) 更多星球中其他人的提交,也很方便的看到...比如球友小六首先在群里提出来,有的代码把冒泡排序写成选择排序了,并且好多都出现这个问题。所以在此统一吆喝一声,大家看看有没有类似的错误。...区别:冒泡排序比较的一定是紧紧相邻的两个元素;而选择排序却不是每次比较紧邻的两个元素,而下面的代码就不是每次比较紧邻的两个元素,正是选择排序的基本实现。...如果还是没有很好的理解,我放上两张例子图: 下面是冒泡排序的例子: 下面是选择排序的例子: 你看一个不起眼的冒泡排序算法,如果细细品味起来也是很有意思的,虽然它的性能注定不好,但是我们的目的是为了训练算法思维

50640

算法系列

大学里面导师整天苦口婆心的教导算法有多么多么重要,但哪个真正听得进去,即使认真的学了出了社会过个两三个月就忘到九霄云外了,记得算法的排序有几种就算不错了的。...说到底还是没有真正的理解,而理解是建立在应用之上,用多了亲历了也就知道其中的道理,学好了也锻炼自己的抽象能力,因此平时没事就多拿出来多练哈,没准哪天突然开窍了也说不定。   ...在此也就说排序排序分为4种:1.交换排序冒泡与快排;2.选择排序:选排与堆排序;3.插入排序:插排与希尔排序;4.合并排序;   冒泡冒泡的思想可以看做是一堆石头沉入水底,小的不断往下浮,大的往下沉...最后,我们经过一次遍历,把数组中最小的数字送上去了 以下是js实现的实例: //冒泡排序 function BubbleSort(arr){ var temp=0;...temp; } } } return arr; } 以上是算法系列15天速成中介绍的思想,以C#实现且算法之间进行了效率比较,这里自己以JS

640100
领券