前言
打工人的周末从周日中午开始,工作找到了,可是就像从一个舒适圈跳到另一个舒适圈(我室友说的๑Ő௰Ő๑)。所以为了改变这个现状,也为了不被舍友安排的明明白白,我还是老老实实的写博客来记录自己学习进度吧。
一、什么是冒泡排序?
名字的由来:因为在升序排序中越小的元素会经由交换慢慢“浮”到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
学习计算机,第一门学习的基础语言,老师一定会讲到冒泡排序吧!不管你第一门是学的c、java还是JavaScript。只要你刚开始学习遇到需要排序的方法,最基础的也是每个程序员必会的就是冒泡排序了。这个排序方法实现思路很简单就是两两交换如果顺序不一致就调换位置,稍微聪明一点的同学应该都能想到,使用两个for循环来实现这个基本的算法。通过重复的访问元素列,只要顺序不对就交换,直到全部顺序一致了才停止交换。
二、算法描述
算法步骤:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素使用1中的方法,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
算法复杂度:
- 时间复杂度:
- 最好:O(n) 最好的情况是待排序的数列是已经期望的序列不用排序
- 平均:O(n2)
- 最坏:O(n2) 最坏的情况就是与最好相反,反序列每次都要交换
- 空间复杂度:O(1)
- 稳定性:稳定
三、JS代码实现
懂前端的同学打开控制台(chrome按F12键,现在好像都是f12吧)复制下面代码粘贴到控制台回车就可以运行看到结果了。(๑′ᴗ‵๑)
代码如下(示例):
//JS代码实现
function maopao(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
}
let ary = [9, 8, 7, 6, 5, 4, 3, 2, 1];
maopao(ary)
console.log(ary);
总结
其实现在还是有一点点的迷茫,不知道该何去何从,对写代码这件事不排斥,但是也说不上那么喜欢,因为一个开源项目都没有,之前被面试官问到这句话,既然喜欢学习前端那有什么开源的前端项目吗?一时语塞,在进入公司前虽然有学习过git也使用过几次,但是也许久没有使用过了,一方面是英语上不行,另一方面就是“思想上的巨人,行动上的矮子”,这句话来描述我再合适不过了,总是想着要做很多,却都没有开始动手,想清楚再去做,好像慢慢的就不会做了,所以任何事都适合直接开始,万事俱备再去做就真的迟了,学习这方面我一直都是看视频加上搞项目,也多亏在实验室有老师带我做项目,也前前后后学习了不少东西,如今才能勉强找到个实习工作,今后还是务必要继续努力,学习的东西太少,而自己的知识又撑不起自己的野心,只能静下心来好好学习,写到这里我到思维是一团乱麻,明天还要上班,总结起来就是学习吧!希望以后自己不光是嘴上一个劲的说,也要实际行动起来,加油!
—— 2020.12.20 23:50 一个即将成为北漂人的独白
今日份励志名言:
“弱小和无知不是生存的障碍,傲慢才是。”
——(刘慈欣 《三体III》)