如果你是计算机系的,要好好学习一下了。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)
里面的循环是把当前剩下的所有元素中一个个相邻比较。把当前最大的放到最后。第一次就找到最大的数在最末尾。第二次就只需要找到第一个到倒数第二个真中的最大。放到倒数第二个位置
50,344
社区成员
85,704
社区内容
加载中
试试用AI创作助手写篇文章吧