冒泡排序

深巷胡同 2018-05-09 07:41:03
冒泡排序用java实现,有点没看明白,那几个循环是起什么作用,麻烦大神指导一下,小白路过,感激。
...全文
955 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzhpo 2018-05-10
  • 打赏
  • 举报
回复
补充一个给你吧,Arrays.sort(arr),就是Java中升序的,很简单。
lzhpo 2018-05-10
  • 打赏
  • 举报
回复
如果是升序的话,就类似于排队高的人站后面,你高就站后面,同理,降序也是如此。 如果没理解一个程序意思,你就自己脑子里运行一边就懂了。
qq_charm 2018-05-10
  • 打赏
  • 举报
回复
第一个循环控制次数,第二个循环是把数组里面的值依次比较
yguoelect 2018-05-10
  • 打赏
  • 举报
回复
就像冒泡一样 最大的先找到 第一个出水面,然后从重冒出来第二个,第三个。。。比较的数据依次减少,直到没有,这样就实现了排序。
深巷胡同 2018-05-10
  • 打赏
  • 举报
回复
引用 4 楼 txwh_2169的回复:
如果你是计算机系的,要好好学习一下了。Java数组索引从0开始,数组第一个值是a[0],最大索引正好是数组长度减1,即a.length - 1,所以数组最后一个值是a[length-1],冒泡排序是比较的过程,按你冒泡逻辑是当前索引的值和下一个值比较,即a[j]和a[J+1]比较,j+1是数组索引,不能超过a.length - 1, 所以j+1最大是a.length-1,所以j最大只能是a.length - 2。但为什么第二个For只是减了1没有减2呢,因为你用了a.length - i - 1,i在第一个循环中最大已经减1了。而-i是为了提高冒泡效率,不减i而把第二个For里的a.legnth-i-1换成a.length-2结果也是正确的。所以冒泡排序的是最大时间复杂度是n*(n-1)即O(n^2)
谢谢了,你解释的很简单明了
txwh_2169 2018-05-10
  • 打赏
  • 举报
回复
如果你是计算机系的,要好好学习一下了。Java数组索引从0开始,数组第一个值是a[0],最大索引正好是数组长度减1,即a.length - 1,所以数组最后一个值是a[length-1],冒泡排序是比较的过程,按你冒泡逻辑是当前索引的值和下一个值比较,即a[j]和a[J+1]比较,j+1是数组索引,不能超过a.length - 1, 所以j+1最大是a.length-1,所以j最大只能是a.length - 2。但为什么第二个For只是减了1没有减2呢,因为你用了a.length - i - 1,i在第一个循环中最大已经减1了。而-i是为了提高冒泡效率,不减i而把第二个For里的a.legnth-i-1换成a.length-2结果也是正确的。所以冒泡排序的是最大时间复杂度是n*(n-1)即O(n^2)
深巷胡同 2018-05-09
  • 打赏
  • 举报
回复
是第二个不是第三个,弄错了
深巷胡同 2018-05-09
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry的回复:
里面的循环是把当前剩下的所有元素中一个个相邻比较。把当前最大的放到最后。第一次就找到最大的数在最末尾。第二次就只需要找到第一个到倒数第二个真中的最大。放到倒数第二个位置
谢谢了,你讲的这个我听懂了,还有两个就是,第一个和第三个循环为什么要减1,而且第三个循环为什么减1之后就不会溢出,溢出的原因是什么?
oyljerry 2018-05-09
  • 打赏
  • 举报
回复
里面的循环是把当前剩下的所有元素中一个个相邻比较。把当前最大的放到最后。第一次就找到最大的数在最末尾。第二次就只需要找到第一个到倒数第二个真中的最大。放到倒数第二个位置

50,344

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧