初识冒泡排序,与算法的爱恨情仇。

各位大牛zi好,好久不见,今天在下课后的公交做了许多感想,自己在学习的路上貌似有点着急,总是急切的想要去赶进度,学新知识,也导致了自己对学过的知识不自信。虽然我只是一个js中级水平的菜鸟子,但我想卷算法hihi,国庆假期,学习了一些基本的算法,数组,链表、二叉树、了解了贪心思想,动态规划等。今天分享一下简单的冒泡排序,谈谈自己的理解,以及现阶段出现的问题,还请大牛zi指点迷津。

初始算法

起初接触和算法有联系的事物,那必然是我曾经最不喜欢的《数据结构》,不知道大家怎么看待这门课程,仅对我来说这可以说是我大二的噩梦,就,。,,很枯燥啊。 But,此时的我觉悟了,就像一颗子弹,从两年前的数据结构课堂发射,直到今天,子弹正中我的眉头,此时教育便真正开始了。

爱恨情仇,从起初的我认为算法是一门十分枯燥且难度极高的学问,直至最近我发现了算法的奥秘与神奇,起初看见算法题目,觉得好难,根本想不到,直至第一次解决算法问题,自己写了40行代码,题解只有短短5行,我第一次感受到了自己与这个代码世界的距离感,也初次了解到算法思想巧妙之处。接着我便学习题解,模仿复现,直到我遇见了——递归。(这te么啥啊)

递归让人又爱又恨,恨他起初让我不断怀疑人生,爱他--真香啊哎呀真香。递归递归,有递就有归,当自己看不懂它的时候好似也是再执行“递”的过程,坚持下去,一定会有“归”。

为什么要学习算法

一、谈谈我的理解

1、可以提高自己的上限,经济基础决定上层建筑

2、增强编程思维,强化逻辑

3、面试必备

4、不会算法不好意思说自己是搞程序的

5、很神奇

二、老师教的

1、算法是计算机世界的基本规则

2、构建你的思维模式

3、想理解框架源码的必备知识

4、vue和react的虚拟dom就是两棵树的diff

5、react16的fiber架构,就是把这棵树,改成了链表

6、jsx解析 用的是栈

7、缓存模块用的是链表

8、vue3的虚拟dom diff,使用的是最长递增子序列

冒泡排序

比如拿Kun来举例

大概思路:两个两个比较,找出最大的放在最后,再重复过程。下面看动图

好,相信看了坤哥的表演,你一定对这个思想有了一定的了解,那么我们来一起捋顺思路:

思路:

1、对未排序的各元素从头到尾依次比较两个相邻元素的大小
2、如果左边的大,则交换位置,一直比较到最后,最后一定是最大的
3、重复上述步骤

规律:

1、两两交换位置,所以需要一个中间变量。---->temp

2、每一轮比较完都会减少一个需要比较的元素,比较到最后只剩下一个元素时,不需要比较,所以一共比较 length-1

3、每一轮比较完后都确定了一个相对最大的,所以每轮比较次数都会减少1,所以每一轮需要比较 length-1– i 次,这里的 length -1 也可以理解为每次比较两个元素,在比较到 arr[length] 时,arr[length+1] 就不存在了,所以我们必须为 length-1 

思路清晰后我们来上代码(大家自己一定要手敲一遍,我就不放代码块了直接上图)

总结:

稳定性:遇到相等的值不会进行交换,是稳定的排序算法

时间复杂度:O(n^2)  运行效率低

适用场景:适用于数据量小的场景

留个问题:

你能想出一个效率更高的排序算法吗?它的时间复杂度为多少?

我的问题还请大牛zi指点迷津

现在学习算法应该不算晚吧,就是不知道自己应该怎么学习算法,我目前是尽量做到每天最少学习一道题,因为要学习正常的课程,基本都是抽出时间才专门学习算法。

学习过程有点着急,总是想着赶进度。老师讲的都可以掌握,剩下的时间基本都是赶进度,学算法,背知识点。

老师要求的项目都做了,剩下的时间应该预习更多的内容还是做更多的练习啊

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值