1.1、排序-冒泡排序(Bubble Sort)

目录

算法简介

一、算法步骤

二、代码实现(Java)

三、代码优化


算法简介

冒泡排序:是一种简单稳定的排序算法,它适合小规模数据的排序。假如将待排序的数据当作泡泡,数据不同,泡泡就大小不同。假如我们想把数据从小到大排序,那么在排序的过程中,小泡泡会慢慢往前被交换到前边,也叫冒上来。

        算法的稳定性是指在排序的过程中,不会改变相等元素的相对位置。假设对一个数组进行冒泡排序,这个数组中有两个值相等的元素a和b,a在b前面。从排序开始到结束,a和b的相对位置不会改变,a一直在b的前面。

时间复杂度:  O(N^2)
空间复杂度:  O(1)

一、算法步骤

假定是对数组进行从小到大的排序。

​​​​​​​​​​​​​​1、关键代码块:比较相邻的元素,如果前一个比后一个大,则进行交换。

2、第一趟排序:将数组中最大的数被交换到最后一个位置。

将第1个元素和第2个元素比较,如果第1个比第2个大,则交换第1个元素和第2个元素,否则不交换;

随后,将第2个元素和第3个元素比较,如果第2个比第3个大,则交换第2个元素和第3个元素,否则不交换;

... 

最后,倒数第2个和最后1个进行比较,将大的数交换到最后一个位置。

3、第二趟排序:将数组中第2大的数被交换到倒数第二位。

将第1个元素和第2个元素比较,如果第1个比第2个大,则交换第1个元素和第2个元素,否则不交换;

随后,将第2个元素和第3个元素比较,如果第2个比第3个大,则交换第2个元素和第3个元素,否则不交换;

... 

最后,倒数第3个和倒数第2个进行比较,将大的数交换到倒数第2个位置。

4、第三趟排序:将数组中第3大的数被交换到倒数第三位。

...

一共需要进行n-1趟排序。

二、代码实现(Java)

public class BubbleSort {
    public static void  main(String[] args){
        int[] array = {3, 7, 1, 2, 1, 2, 9, 5, 8};
        bubbleSort(array);
        print(array);
    }

    private static void bubbleSort(int[] array){
        if(array==null || array.length < 2) return;
      
        //一共需要array.length-1趟比较
        for(int i = array.length-1; i>0; i--){
            //每一趟比较从0开始,到i-1结束
            for(int j = 0; j<i; j++){
                //进行数据交换
                if(array[j]>array[j+1]){
                   int temp = arr[j];
                   arr[j] = arr[j + 1];
                   arr[j + 1] = temp;
                }
            }
        }
    }

    private static void print(int[] array){
        for (int x : array){
            System.out.print(x+" ");
        }
        System.out.println();
    }
}

三、代码优化

private static void bubbleSort(int[] array){
        if(array==null || array.length < 2) return;
      
        boolean flag; //是否进行了交换
        //一共需要array.length-1趟比较
        for(int i = array.length-1; i>0; i--){
            flag = false;
            //每一趟比较从0开始,到i-1结束
            for(int j = 0; j<i; j++){
                //进行数据交换
                if(array[j]>array[j+1]){
                   int temp = arr[j];
                   arr[j] = arr[j + 1];
                   arr[j + 1] = temp;
                   flag = true;
                }
            }
            //未进行数据交换,说明数组剩余部分已经有序
            if(!flag){
                break;
            }
        }
    }

下一篇 1.2、排序-选择排序(Select Sort)​​​​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值