2021-06-12

本文介绍了JAVA中的冒泡排序算法,包括其基本原理和实现步骤,详细讲解了冒泡排序的时间复杂度。此外,还提供了一种优化方案,通过添加布尔变量flag来判断数组是否已排序,从而减少不必要的比较,提高排序效率。示例代码展示了未优化和优化后的冒泡排序方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五.JAVA 系列学习笔记之冒泡排序
作为排序算法中比较经典的,冒泡排序实现起来比较简单,有两个原则
1.两层循环,外层冒泡论数,里层依次比较;
2.算法时间复杂度为O(n的平方);
1.2具体算法如下:(升序为例)
比较数组之中的两个相邻的数,如果第一个比第二个大,那么就让第一个与第二个互换下位置(使用If语句和临时变量即可实现);
2.每次比较都会产生一个结果,即必然会出现一个最大的和一个最小的;
3.比较的次数为数组的长度减一;
4.下一轮可以减少一次排序,一共可以进行数组长度减一轮;
5.依次循环,直至结束;
程序如下:

package Array;
//冒泡排序算法
import java.util.Arrays;

public class Demo05 {
    public static void main(String[] args) {
        int[] a = {1,7,8,28,35,68,79};
        int[] sort = sort (a);
        System.out.println(Arrays.toString(sort));
        
    }
    //冒泡排序
    public static int[] sort(int[] arrays) {
        int t=0;
       for (int i=0;i<arrays.length-1;i++)//设置外循环,总比较次数,应该为数组长度减一
       {
           for (int j=0;j<arrays.length-1;j++)
           {
               if (arrays[j + 1] < arrays[j]) {    //if语句进行比较判断,根据大小进行互换位置
                   t=arrays[j+1];
                   arrays[j+1]=arrays[j];
                   arrays[j]=t;
               }
               }
           }
       return arrays;
       }

        }

优化问题:
冒泡排序作为经典的排序算法,优化的算法比较多,笔者在此仅写出一种,仅供参考;
冒泡算法,需要比较两个相邻的数,不管当前有没有进行顺序,或者如果数组本身已经满足顺序要求,根据冒泡算法,还是要进行上述的过程。那么就出现了问题,基于此,下述的优化算法会在排序之前加入判断,如果当前顺序满足条件,则程序终止。稍后程序给出的仅为减少最后一次的方法
程序如下:

package Array;
//冒泡排序算法
import java.util.Arrays;
public class Demo05 {
    public static void main(String[] args) {
        int[] a = {1,7,8,28,35,68,79};
        int[] sort = sort (a);
        System.out.println(Arrays.toString(sort));

    }
    //冒泡排序
    public static int[] sort(int[] arrays) {
        boolean flag = false;  //添加布尔标量flag
        int t=0;
       for (int i=0;i<arrays.length-1;i++)//设置外循环,总比较次数,应该为数组长度减一
       {
           for (int j=0;j<arrays.length-1;j++)
           {
               if (arrays[j + 1] < arrays[j]) {    //if语句进行比较判断,根据大小进行互换位置
                   t=arrays[j+1];
                   arrays[j+1]=arrays[j];
                   arrays[j]=t;
                   flag =true;//如果进行了循环则为真
               }
               if(flag=false)//if语句对flag进行判断,为false则跳出循环
                   break;
               }
           }
       return arrays;
       }
        }

上述实现原理比较简单,在方法中定义了一个布尔变量,首先让布尔变量为false,在第二段循环里面规定布尔变量为ture,如果循环结束后,对布尔值进行判断,如果值为false,则打断循环。即可实现上述优化
以上为个人片语,如有不妥,多多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值