首页 > 其他分享 >Day16:冒泡排序详解

Day16:冒泡排序详解

时间:2022-11-19 11:46:46浏览次数:43  
标签:int 冒泡排序 比较 Day16 详解 数组 array public

冒泡排序

冒泡循环有两层循环,第一层控制循环轮数,第二层循环代表元素比较的次数。

利用冒泡排序获得升序或者降序的数组

//利用冒泡排序将一个数组进行降序排序
//思路:
//冒泡排序是将相邻元素进行比较,我们将两个相邻的元素进行比较,即后者与前者比较,如果后者较大,则交换两者位置
//当交换的次数够多,则能够实现降序排序
//数组内的每个元素都比较了一次我们称之为一轮比较
//通过大小值互换位置,每一轮比较下来总有最小的值会被扔在最后,且下一轮比较这个极值无需再参与比较
//数组有多少元素,就有多少坑位,每一个坑位都会在一次次比较中被淘汰出来的极值填住
//因为每轮比较都会淘汰一个元素,所以下一轮的比较次数就会少比较一次,即少比较的次数与轮数相等;元素间的比较次数会随着轮数的增加而减少


import java.util.Arrays;//导入类,方便后面使用类方法
public class Demo{
    
    public static void main(String[] args){
       
            int[] array={4,64,65,4164,564,156};
            int[] b=sort(array);//使用我们自己写的降序方法,导入数组
        System.out.println(Arrays.toString(b));//使用Arrays类的toString方法将数组进行打印
    }
        
        //我们先写一个降序的方法,等会直接调用
         public static int[] sort(int[] array){
             int a=0;
        for(int i=0;i<array.length-1;i++){//代表比较的轮数,因为每次淘汰一个元素,有多少坑位就需要多少次淘汰,就需要多少轮
            for(int j=0;j<array.length-1-i;j++){//这里j<array.length-1-i需要好好理解一下,这里代表的是每一轮比较的次数
                //这里两个for循环,第一个for循环是代表要比较的轮数,
                if(array[j]<array[j+1]){//如果换成>,则此方法为升序排序
                    a=array[j];
                    array[j]=array[j+1];//两个元素不能相互赋值,必须借助第三方来转移
                    array[j+1]=a;
                }
            }
        }
        return array;
    
}

上面我们已经成功写出冒泡排序的方法来对乱序的数组进行排序,但是当我们得到的一个数组他的排序方式已经是按照我们所写的方式进行排序的,那么我们再进行此方法进行排序,属实浪费资源,因此为了方法更加完善,我们将代码优化。在方法中加入一个执行标志来判断。

import java.util.Arrays;
public class Demo{
    public static void main(String[] args){
            int[] array={4,64,65,4164,564,156};
            int[] b=sort(array);
        System.out.println(Arrays.toString(b));
    }
         public static int[] sort(int[] array){
             int a=0;
        for(int i=0;i<array.length-1;i++){
             boolean tag=false;//先定义一个标签
            for(int j=0;j<array.length-1-i;j++){
                if(array[j]<array[j+1]){
                    a=array[j];
                    array[j]=array[j+1];
                    array[j+1]=a;
                    tag=true;//如果有发生比较,即发生过位置交换,则标签变值
                }
                if(tag==false){
                    break;//如果元素一轮比较下来都没有发生位置互换,则说明排序满足当前方法的排序,无需再次下轮比较
                }
            }
        }
        return array;
}

标签:int,冒泡排序,比较,Day16,详解,数组,array,public
From: https://www.cnblogs.com/CQliuwei/p/16905758.html

相关文章

  • 冒泡排序_关于toString
    //冒泡排序packagecom.ShiXun_JiChu;importjava.util.Arrays;publicclassday20221119_05{publicstaticvoidmain(String[]args){int[]arr={10,5,2,1......
  • 内网渗透神器CobaltStrike之Beacon详解(三)
    Beacon的种类HTTPBeacon和HTTPSBeacon这两个beacon的原理是通过发送http请求与受害主机通信来传达命令,以此实现控制效果优点是传输数据快,缺点时隐蔽性差,容易被......
  • Bash 脚本 命令使用详解
    什么是Bash简介Bash(GNUBourne-AgainShell)是一个为GNU计划编写的Unixshell,它是许多Linux平台默认使用的shell。shell是一个命令解释器,是介于操作系统内核与用户......
  • 详解.env文件配置---全局环境变量
    一、.env文件说明.env---全局默认配置文件,在所有的环境中被载入,当你指定了环境,它也会合并,并且优先级大于.env,没有指定环境时先找它.env.development---指定开发......
  • Day15.1:Arrays类的详解
    Arrays类的详解首先Arrays是Java中的一个类,我们可以调用Arrays类的方法来方便我们对数组的使用Arrays类的方法都是static修饰的,可以直接按照类.方法名进行调用案例:利......
  • [排序算法] 双向冒泡排序 (C++)
    前言本文章是建立在冒泡排序的基础上写的,如还有对冒泡排序不了解的童鞋,可以看看这里哦~冒泡排序C++双向冒泡排序原理双向冒泡排序的基本思想与冒泡排序还是一样......
  • 2022最新iOS打包、发布与证书体系详解
    教程截图:iOS开发者提供的文章。他在论坛上是一个很摩登的年轻人–AdamEberbach。BundleidentifierprovisioningprofilesAppIDcertificatesigningrequest对于新......
  • 2022最新iOS打包、发布与证书体系详解
     教程截图:iOS开发者提供的文章。他在论坛上是一个很摩登的年轻人–AdamEberbach。BundleidentifierprovisioningprofilesAppIDcertificatesignin......
  • ADB命令详解 - 获取android手机系统相关信息
    adb获取android手机系统版本,已对应的api版本和硬件相关信息:https://blog.csdn.net/l_vaule/article/details/79866396https://www.cnblogs.com/hyf20131113/p/11887981.h......
  • pytest.ini详解
    pytest.ini详解[pytest]timeout=1500addopts=-v-s-pno:warningslog_cli=true;NOTSET,DEBUG,INFO,WARNING,ERROR,CRITICALlog_cli_level=NOTSETlog_......