java实现冒泡排序详细注释适合初学者入门

冒泡排序原理

   
原理
      
 *      比较相邻的两个元素,如果第一个元素比第二个元素大,那就交换一下位置,
 *      每一对相邻的元素都要作比较,到最后最大的元素就到最后面了
 *      
 *      
 *      元素有n个,那比较的趟数就是n-1趟,
 *      每一趟都是相邻元素比较,一直到最后,最大的到最后一个,相邻比较的次数,没有都减一次

例如有一组数据{9,6,8,2,7}

规律  比较趟数=元素数减一
       第一趟比价次数等于元素个数减一每趟比较次数比上一次减一

 开始冒泡排序
 第一趟比较
 9,6,8,2,7
 9和6比较  9比6大  9和6交换位置  6,9,8,2,7
 然后9和8比较 9比8大 9和8 交换位置  6,8,9,2,7
 然后9和2比较 9比2大 9和2交换位置  6,8,2,9,7
 然后9和7比较 9比7大 9和7交换位置 6,8,2,7,9

 第一趟比较结束  比较了4次  一共五个元素参加


 第二趟比较
6,8,2,7,9
6和8比较 8比6大 不交换位置  6,8,2,7,9
然后8和2比较 8比2大 8和2交换位置  6,2,8,7,9
然后8和7比较 8比7大 8和7交换位置 6,2,7,8,9

第二趟比较  比较了3次   出来最大的9没有参加  其他4个都参加了

第三趟比较
6,2,7,8,9
6和2比较 6比2大 交换位置  2,6,7,8,9
然后6和7比较  6小于7  不交换位置 2,6,7,8,9

 第三趟比较  比较2次  出去最后的8 9 没参加  三个数参加

 第四趟比较
2,6,7,8,9
2和6比较  2小于6不交换位置  2,6,7,8,9

第四趟比较  比较一次

public class Demo3 {
    public static void main(String[] args) {
        int[] array = {3,5,2,1};
        for (int i = 0; i < array.length - 1; i++) {//外层的for循环控制比较的趟数
            for (int j = 0; j < array.length - i - 1; j++) {//内存for循环控制相邻元素比较次数

                /*分析冒泡排序
            进入外层for循环
            i = 0, 0 < 3 ,true
                 进入内层for循环
                 j = 0, 0 < 3, if语句   array[0]>array[1]   false  j++
                 j = 1, 1 < 3, if语句   array[1]>array[2]   true  交换位置{3,2,5,1}  j++
                 j = 2, 2 < 3, if语句   array[2]>array[3]   true  交换位置{3,2,1,5}  j++
                 j = 3 ,3< 3  false  内层for循环结束  i++
            i = 1, 1 < 3,true
                 进入内层for循环
                 j = 0, 0 < 2, if语句  array[0]>array[1]  true  交换位置{2,3,1,5}  j++
                 j= 1,  1< 2, if语句   array[1]> array[2]  true  交换位置 {2,1,3,5} j++
                 j = 2 , 2< 2,  false   内层for 循环结束  i++
            i = 2 , 2 < 3, true
                 进入内层for循环
                 j = 0, 0 < 1, if语句  array[0] > array[1]  true  交换外置{1,2,3,5} j++
                 j= 1, 1< 1, false  内层for 循环结束 i++
            i = 3 , 3 < 3,false  外层for 循环结束

                 然后打印输出

                 */

                if (array[j] > array[j + 1]){
                    int a = 0;
                    a = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = a;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值