Java类中参数列表的个数与数据类型有哪些?
可变参数 参数的个数不确定,可以是0个可以是多个,参数的数据类型必须相同 可变参数必须要写在参数列表的最后 操作可变参数,要通过使用数组的方式Java第6天 可变参数 参数的个数不确定,可以是0个可以是多个,参数的数据类型必须相同 可变参数必须要写在参数列表的最后 操作可变参数,要通过使用数组的方式 数组排序 冒泡排序 选择排序 二分法查找 Arrays 工具类 面向对象 new关键字数组排序 冒泡排序 选择排序 二分法查找 Arrays 工具类面向对象 new关键字
Java中的冒泡排序是如何实现的?
谢邀。冒泡排序还是比较好理解的,主要是要理解其核心思想。如果从小到大排序,每一轮排序就找出未完成排序序列中的最大值,然后放在最后,直到排序完成为止。
(冒泡排序过程及结果展示)
一般而言,冒泡排序有以下步骤:
设数组长度为N,比较前后相邻的两个数据,如果前值大于后值,就将这两个值交换。
重复以上步骤,从第0个数据到N-1个数据进行遍历,最大值就会沉在下方。
以上就是冒泡排序的基本思想,按照这个定义很快就能写出代码:
测试代码:
运行结果如下:
0,1,1,2,3,3,4,7,8,9,12,22,65
当然,如果序列本身有一部分是有序序列,或者本来就排序已经完成,那么遍历会带来不少开销,可以设置一个布尔值进行开关操作。如果已经完成排序,那么中止遍历,如果未完成,继续遍历。
如果你对学习人工智能和科技新闻感兴趣,可以订阅我的头条号,我会在这里发布所有与算法、机器学习以及深度学习有关的有趣文章。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论,看到即回。
(码字不易,若文章对你帮助可点赞支持~)
冒泡排序应该算是计算机专业算法里面最简单的算法了,与选择排序,插入排序算是算法里面最为基础的排序方法了,当然虽然简单,可能对于很多真正从事一线开发的用得比较多的,但是这里以冒泡排序来说明,但本文并不想说具体的代码实现方法。
首先冒泡排序,顾名思义,由字面意义理解,很显然是很形象的,想象一下水中气泡冒起来的样子你就大概明白的。这里以两个为单位,然后比较两个数字的大小,小的就排在前面,就是“上浮”的意思。第二轮就用下一个数字去匹配前两个数字,然后在根据大小调整顺序,循环往复,最终得到结果,其实很简单。
说到这里其实并不想给大家说到底这个算法是怎么实现的,因为这类算法的实现简直太多了,但是算法最重要的还是思考问题的方式,就像计算机编程语言,为什么要有循环、条件语句一样。计算机程序是聪明的,但计算机本身是机械的,计算机只能理解最简单的“是”或者“不是”,也就是我们通常所说的二进制代码“0”、“1”代码,对于学习计算机来说,最重要的还是计算机思维,如何像计算机一样思考、处理问题。
对于学习算法,我认为最重要的还是几点因素:
严谨的数理逻辑思维
对于学习计算机来说,毫无疑问,我永远支持的观点是,要想成为一个出色的程序员,一个优秀的软件工程师,良好、严谨的数理逻辑思维是最重要的,你会发现,到最后决定一个程序员上限往往就是数理逻辑思维,也就是常说的天赋。你会发现很多在行业内颇有建树的大牛,都是学生时代数学、物理这些课程学习得很好的,不是说数学不好就不聪明,只是做这一行,数学好会让你在工作和学习中事半功倍,所以你也必须随时训练和提升自己的逻辑思维能力。
掌握常用的算法、也要多多了解算法进展
对于大多数一线的工程师来说,掌握最常用的一些算法就可以,我觉得《算法》(第四版)和《算法导论》这两本书绰绰有余,基本上这两本书能认真过一遍绝对足以应付日常所有工作。毕竟对于复杂的算法,或者一些大公司来说,都有专门的算法工程师帮你搞定,但是适当的了解一些算法进展也是好的,比如老爷子的《计算机程序设计艺术》难度相当大,虽然很经典,但一些算法也过时了,对于学习是好的,但未必就能紧跟时代。
多实践、多逛开源论坛
最重要的还是实践,这是一个从事一线开发的工程师最重要的,为什么说万小时理论非常有道理的,同行在编程开发领域也一样,其实足够多的实践和训练会让你更加游刃有余。除此之外,多逛开源论坛绝对是大有裨益,现在越来越多的优秀程序员把自己的技术分享出来大家一起讨论,开源的世界更是诞生了emacs,gcc,Linux,TensorFlow,tex,Java等等无数经典作品,所以绝对值得你投入时间和经历去学习、去探索、甚至去贡献。
当然本文略微有点跑题,但是这是笔者看到这个问题以后的第一想法,毕竟冒泡排序的Java实现在无数的论坛出现了无数次,也是最基础的算法,所以建议更多的通过自己的探索去学会慢慢实现,最后希望每一个编程爱好者都能够取得很好的成绩。
我们先来看看冒泡排序的算法是如何定义的:
冒泡算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
Java编码实现
了解了冒泡排序的基本定义之后,根据其思想我们来根据题主的要求看看如何用Java实现冒泡排序算法,代码如下图:
基本原理就是如下的逻辑走向:
执行后输出如下:
有没有发现什么问题?是不是到了第6次已经完成排序了?后面的是不是就属于浪费了?所以我们需要优化一下,当他的顺序已经排序完毕了就不再进行排序了,优化后的代码如下:
执行后输出:
可以看出来只执行了6次排序。
算法复杂度
那么冒泡算法的复杂度是怎样的呢?相信大家看到这已经基本上可以算出来了:
时间复杂度:两层循环O(n²);
空间复杂度:还是原来的数组,没有开辟新的内存空间,所以是O(n)。
以上就是冒泡算法Java版的实现方案,大家有什么看法呢?欢迎评论区交流讨论,共同学习~
我是【java架构设计】,关注我,持续为您提供Java领域优质内容!
不废话上代码:
public static int[] bobleSort(int[] arr) {
for(int i = 0; i<arr.length;i++) {
for(int j = 0 ;j<arr.length-i-1;j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
printArray(arr);
System.out.println("第几次排序"+ i);
}
return arr;
}
public static void printArray(int[] arr) {
for(Integer item : arr) {
System.out.print(item+" ");
}
}
public static void main(String[] agrs) {
int[] arr = new int[] {23,43,45,21,32,67,21,90};
printArray(arr);
System.out.println("最初顺序");
int[] boor=bobleSort(arr);
printArray(boor);
System.out.println("最后结果");
}
执行结果:
23 43 45 21 32 67 21 90 最初顺序
23 43 21 32 45 21 67 90 第几次排序0
23 21 32 43 21 45 67 90 第几次排序1
21 23 32 21 43 45 67 90 第几次排序2
21 23 21 32 43 45 67 90 第几次排序3
21 21 23 32 43 45 67 90 第几次排序4
21 21 23 32 43 45 67 90 第几次排序5
21 21 23 32 43 45 67 90 第几次排序6
21 21 23 32 43 45 67 90 第几次排序7
21 21 23 32 43 45 67 90 最后结果
————————————————
如何才能成为java架构师?我为大家来分析一下?
首先架构师不是那么好当,技术实力一定要过关,要具有架构师的思想,其次架构师是企业级开发所需的Dubbo框架、zookeper基本原理、redis分布式缓存、JVM性能优化,Nginx+apache+Tomcat集群部署、大数据hadoop,Hbase实时计算spark、storm、数据分析分词和权重等核心技术。
如何成为一个优秀的架构师呢?我用七张图片来告诉大家。
另外的四张图片想成为架构师的可以私信我,每天更新java架构师技术视频资料。
大家可以先学习下分布式锁的实现:
链接: 密码: umu3
还没有评论,来说两句吧...