冒泡排序原理+冒泡排序代码详解

本文参考动图来自公众号:吴师兄学算法。看动图,学算法,认准吴师兄~

冒泡算法方法原理

        冒泡排序是一种简单的排序算法,它也是一种稳定排序算法(一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。)其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换(这个过程我们成为比较的次数)。一直重复这个过程(我们称之为比较的轮数),直到没有任何两个相邻元素可以交换,就表明完成了排序。算法过程如下图所示:

 由于该排序算法的每一轮要遍历所有元素,轮转的次数和元素数量相当,所以时间复杂度是O(N^2) 

冒泡算法代码实现

public class DemoTest {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {20, 34, 14, 75, 26, 72, 61};
        System.out.println("排序前:" + Arrays.toString(arr));

          /* 为什么是arr.lenth-1? 因为如果是arr.length会导致“数组下标越界”错误。
        * 冒泡算法每次比较的时候,都和下一个元素进行比较,
        * 到arr.length-1那个元素的时候,就会和arr.length那个元素比较,
        * 因此i只需要到arr.length-1就可以了
         */
        for (int i = 0; i < arr.length-1; i++) {
             /* 内层循环是每轮比较次数
             * 为什么是arr.lenth-1-i? 
             * 为什么-1:因为如果是arr.length会导致“数组下标越界”错误。
             * 冒泡算法每次比较的时候,都和下一个元素进行比较,
             * 到arr.length-1那个元素的时候,就会和arr.length那个元素比较,
             * 因此i只需要到arr.length-1就可以了;
             * 为什么-i:因为第一轮比较(此时i=0)我们需要比较arr.length-1次,
             * 第二轮比较的时候(此时i=1),我们已经比完一个元素了,剩下需要比较的次数应该减掉这个已经比完的也就是arr.length-1-1;
             * 第三轮比较的适合(此时i=2),我们已经比完两个元素了,剩下需要比较的次数应该减掉这两个已经比完的也就是arr.length-1-2;
             * 找规律可知,需要比较的次数应该是:arr.length-1-i;
            * */
            for (int j = 0; j < arr.length-1-i; j++) {
                if (arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值