枚举与排序心得
知识点
枚举与排序
今天终于学到了排序,排序是算法里面的一部分,我自己还是一个比较爱思考的人,算法有很多种,今天学了两个排序算法“冒泡排序”与“选择排序”,算法这种东西难度挺大的不过面试的时候也是经常面的,算法不好理解,不理解就没办法写代码
枚举
枚举这块我自己感觉后期也是常用的一个,之前上网搜文章看都是说常量使用枚举,老师这块没讲那么多,我自己有搜索了点学了一下
枚举是一种受限制的类,并且具有自己的方法,它自己也是拥有方法的。
扩展
其实我自己之前写代码总是不规范,所有读了代码规范这方面的书“码出高效”,看完书后再写代码你就会感觉写出来的代码高级的很😂,当然了学代码的规范也不是显的高级,因为有些不规范总会导致代码的小问题,并且代码自己需要看别人也是要看的,所以写规范很重要,扯这么多规范和枚举好像没什么关系,其实不,规范中有一项关于魔法值的问题,魔法值是什么那?在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义,这种的数值就是魔法值,魔法值出现的次数太多就会容易搞混,这个时候使用规范的写法就是将这些数值都换做常量,常量是不变的,我之前常量都是写到接口中,用的时候实现接口用常量,但上网看了好多文章都提到常量最好是放在枚举类中,学过枚举类后我的常量以后肯定是会在枚举类中啦。
其实关于为什么常量写枚举里我也是小有了解,我们使用最普通的方式定义常量,用的时候其实非常的不直观的,还是写在枚举类中直观点。
排序
说到算法肯定有人就比较排斥,想着都是什么数学的东西了,那你要是这样想也没有错,算法这块理解不太容易,而且算法又非常之多。
就今天学习的冒泡排序,从名字你就应该把他理解成水中气泡,从物理学的气压方面说…(不扯了😂),水里气泡大多都是大的气泡在上,这也是物理学,冒泡排序可以理解为就是将大的气泡给排到上面,而从代码的角度看就是从一堆数中将大的数拿出来方法最后,顺序那就是从最开始的一个数值和后面的数对比,如果小了就拿着大的继续向后去排这些数,这些数要一个一个的对比。
虽然说起来容易但做代码的时候还是比较难的。
发现问题
这边给大家扩展个老师没讲过的知识,时间复杂度与空间复杂度,听到这么专业的词是不是怕了,哈哈哈哈,没错是挺专业的,之前在力扣上做算法题看他们都写得这些个什么复杂度,感觉挺好玩就了解了点。
时间复杂度大概可以理解为你的代码在虚拟机运行得时间,代码中使用一个for循环复杂度就是一个n,再嵌套一个for循环就是n^2了。
空间复杂度就是代码在虚拟机里使用得内存了,算法写出来有太多方式了,当时时间与空间使用越小得解题思路才是最佳的。
?问题?
现在有一杯可乐和一杯雪碧怎么将其换到各自不同的杯子里?
老师上课将的是再拿出一个杯子,将雪碧倒入空杯再将可乐倒入雪碧杯里,最后将雪碧倒入可乐杯里,这样就实现了互换。“将a b中的值交换”
n=a
a=b
b=n
解决问题
这个问题就是冒泡排序里使用的交换数值问题,上面的虽然可以实现换值,但从空间复杂度来说会令开辟一块空间(空杯)。
其实还有一种方法:
a=a+b
b=a-b
a=a-b
当然我上网搜这种方法,有的人说这种方法好像有瑕疵,不过目前我还没有遇到。
每日收获
学习算法需要先将这种算法了解了再去写代码,而且你的这个思维还要清晰,今天学的两个算法都是非常有用的,挺好