A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sjw12025 中级黑马   /  2016-6-15 22:56  /  475 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

按照冒泡排序从小到大实现:9 8 7 6 5
第一趟排序前:9 8 7 6 5   //经过第一趟已经找到了最大的值,放到最底下,同时最小的值向前浮动了一位
        第一次:8 9 7 6 5
        第二次:8 7 9 6 5
        第三次:8 7 6 9 5
        第四次:8 7 6 5 9
       
第二趟排序前:8 7 6 5 9
        第一次:7 8 6 5 9
        第二次:7 6 8 5 9
        第三次:7 6 5 8 9
        第四次:7 6 5 8 9
       
第三趟排序前:7 6 5 8 9
        第一次:6 7 5 8 9
        第二次:6 5 7 8 9
        第三次:6 5 7 8 9
        第四次:6 5 7 8 9
       
第四趟排序前:6 5 7 8 9
        第一次:5 6 7 8 9
        第二次:5 6 7 8 9
        第三次:5 6 7 8 9
        第四次:5 6 7 8 9

仔细分析(数组长度:len=arr.length=5):
趟数(j)                        次数=len-1-j
0                                4
1                                3
2                                2
3                                1
1.通过上面的分析我们可以发现,5个数总共排序4趟,所以如果有n(就是数组arr的长度arr.length)个数的话,排序为n-1(arr.length-1)趟
所以控制趟数的循环可以写成:
for(int j=0;j<arr.length-1;j++){}注意:j<arr.length-1,代表j只能取到arr.length-2,而j从0开始,所以中间循环的次数为:arr.length-2-(-1)=arr.length-1趟
2.通过上面的分析每趟所循环的次数为len-1-j即arr.length-1-j,而内层循环是比较相邻的两个数,所以变量i要从0开始,这样内层循环就可以写为:
for(int i=0;i<arr.length-1-j;i++){}
3.将上面的外层和内层循环组合即为排序的伪代码:
for(int j=0;j<arr.length-1;j++){
        for(int i=0;i<arr.length-1-j;i++){
                if(arr[i]>arr[i+1]){
                        int temp = arr[i];
                        arr[i] = arr[i+1];
                        arr[i+1] = temp;
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马