专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

谈谈冒泡排序

冒泡排序介绍

冒泡排序是我们得最多的排序方式之一,原因是简单易实现,且原理易懂。顾名思义,冒泡排序,它的排序过程就像水中的气泡一样,一个一个上浮到水面。

冒泡排序代码实现

import java.util.Arrays;

public class MaopaoSort {

    static int[] array = {3,2,4,1,5,0};

    public static void maopaoSort(int[] a) 
    {
        //外层循环,是需要进行比较的轮数,一共进行5次即可
        for(int i=0;i<a.length-1;i++) 
        {
            //内存循环,是每一轮中进行的两两比较
            for(int j=0;j<a.length-1;j++) 
            {
                if(a[j] > a[j+1]) 
                {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp; 
                }
            }
            System.out.println("第"+(i+1)+"轮排序后的数组为: "+Arrays.toString(a));
        }
    }

    public static void main(String[] args) {
        maopaoSort(array);
    }
}

冒泡排序的优化

1 .观察上述代码和运行结果,我们可以发现,当第一轮结束后,最后一个数字一定是数组中最大的元素,那么我们在进行第二趟的两两比较时,实际上是没有必要再对第5个和第6个进行比较的。那么我们可以修改代码如下:

public static void maopaoSort(int[] a) 
{
    //外层循环,是需要进行比较的轮数,一共进行5次即可
    for(int i=0;i<a.length-1;i++) 
    {
        //内存循环,是每一轮中进行的两两比较
        //并且每一轮结束后,下一次的两两比较中可以少比较一次
        for(int j=0;j<a.length-i-1;j++) 
        {
            if(a[j] > a[j+1]) 
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp; 
            }
        }
        System.out.println("第"+(i+1)+"轮排序后的数组为: "+Arrays.toString(a));
    }
}

这里可以想到,当某一轮的两两比较中,如果都没有发生数组元素的互换,那么其实排序工作已经完成了,所以我们可以考虑在程序中加入一个flag,默认为false,含义是该轮比较中是否发生了元素互换,当程序中执行到元素互换时,将该flag置为true,当该轮比较结束时,若flag为flase,则说明该轮比较未发生元素互换,那么排序完成,若flag为true,说明本轮比较仍然有元素互换,需要继续进行下轮排序。代码实现如下:

import java.util.Arrays;

public class MaopaoSort {

    static int[] array = {1,2,0,3,5,4};

    public static void maopaoSort(int[] a) 
    {
        //外层循环,是需要进行比较的轮数,一共进行5次即可
        for(int i=0;i<a.length-1;i++) 
        {
            boolean flag = false;
            //内存循环,是每一轮中进行的两两比较
            for(int j=0;j<a.length-i-1;j++) 
            {
                if(a[j] > a[j+1]) 
                {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                    flag = true;
                }
            }
            System.out.println("第"+(i+1)+"轮排序后的数组为: "+Arrays.toString(a));
            if(flag == false)
            {
                System.out.println("本轮中的两两比较未发生元素互换,排序已经完成啦");
                return;
            }
        }
    }

    public static void main(String[] args) {
        maopaoSort(array);
    }
}

文章永久链接:https://tech.souyunku.com/27872

未经允许不得转载:搜云库技术团队 » 谈谈冒泡排序

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们