我给你说一下冒泡的原理吧:
冒泡冒泡,顾名思义,就是往上走的意思。
冒泡排序是要依靠两层循环,外层控制次数,内层逐个比较。
第一次外层循环将最大(最小)的值放到最上面(数组最后面);
第二次外层循环把第二大(小)的值放到从上往下第2个位置:(数组最后一个)
那么,每一次外层循环,内层的循环只需要循环从1到总长度减外层次数的长度,这就是:
for(int j=0;j
然后实现把最大(最小)的值放到最后面的方法是挨着的两个数依次做判断。这就是:
if(arr[j]
你的这个排序是要把最小的放到最后面,也就是从大到小的排序。
我估计你对边界:j
那个大小比较是说,如果前一个数比后一个小,则交换位置;
假设有n个数(n就是上边程序中的arr.length)
第一次冒泡排序(这时候i=0),最大的数就排在了最后。
所以第二次(这时候i=1)排序的时候就从第一个开始比较到倒数第二个就可以了,
这样,第三次排序只需比较到倒数第三个
第i次比较,只需要比较到(n-i)个,也就是下标为(n-i-1)的数
写几个无序的数字,按照程序一步一步来,你就知道了,而且印象深刻,绝对忘不了!!!
第一次内层循环:for(int j=0;j
当j
双层循环,本人浅显的认为,外层循环一次,里面就要循环很多次,直到里面的循环满足条件,再到外层循环进行一次循环,再到里面循环很多次。。。。盗梦空间一样
--------------------------------
就是冒泡多少次,假如有2个数,就要来1轮,有3个数,就要来2轮,来n个数,就要来n-1轮
为什么要来n-1轮冒泡呢?因为前面说了一轮只冒泡一个数,本来理论上要冒泡n轮才得到最终结果,但是当排除了n-1个最大嫌疑犯(嫌疑犯- -),是不是只有一个是真相了呢?也就是冒泡了n-1个数以后,最后一个数不用冒泡都能知道他是不是最大或最小呢,划重点:冒泡是为了排序啊,排序之后肯定是有最大值和最小值,所以最后一个数肯定是最大值或最小值。