首页 > 编程语言 >Java 冒泡排序

Java 冒泡排序

时间:2023-04-01 11:44:44浏览次数:31  
标签:tmp Java int length 冒泡排序 flag 循环 array

冒泡排序

  • 冒泡排序由嵌套循环完成,并分为外循环和内循环

  • 内循环负责比较数组中,两个相邻的元素,如果第一个数比第二个数大,则交换两者的位置,相邻两数依次循环进行比较

  • 每完成一次内循环比较(即外循环走完一步)都会产生一个当次内循环最大或者最小的数字并放在数组末尾

  • 所以外循环负责将每次内循环中最大或最小的数字放在本次内循环的数组末尾

public static int[] sort(int[] array){
        int tmp = 0;//临时变量
        for (int i = 0; i < array.length-1; i++) {//外循环,当数组只剩最后一个数字没有排序时,此时不再需要排序,所以少一次循环,即length-1
            for (int j = 0; j < array.length-1-i; j++) {//内循环,外循环每走一步,即得出一个最大或最小值放在本次外循环的数字末尾,此时只要对排在最大或最小值前面的数进行比较即可
                if (array[j]>array[j+1]){
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }

        return array;
    }
  • 有时候,会遇到程序并没有走完,但是数组已经排序完成,而程序并不知道,此时相当于程序多走了,浪费了资源。这时,我们还可以继续优化代码。我们可以通过添加一个标签flag,当执行了位置交换,证明代码运行了,flag=true。如果这段代码并未运行,则flag=false,此时结束跳出循环。

优化后代码:

public static int[] sort(int[] array){

        int tmp = 0;
        for (int i = 0; i < array.length-1; i++) {//外循环
            boolean flag = false;//要放在外循环中,循环令flag=false,不然经历一次交换位置之后flag=true就没法继续监测接下来的循环
            for (int j = 0; j < array.length-1-i; j++) {//内循环
                if (array[j]>array[j+1]){
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    flag = true;
                }
                }
            if (flag=false){//证明这一步整个内循环都没有进行位置交换,即数组已经排序完成,结束循环
                    break;
            }
        }

        return array;
    }

标签:tmp,Java,int,length,冒泡排序,flag,循环,array
From: https://www.cnblogs.com/huang-lin/p/17278329.html

相关文章

  • Java 稀疏数组
    稀疏数组当一个数组中大部分元素为0时,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模下面对该原始数组进行压缩,求出其稀疏数......
  • java方法- 冒泡排序
    冒泡排序冒泡排序是最为出名的排序之一,总共有八大排序冒泡的代码是两层循环,外层冒泡轮数,里层依次比较算法时间复杂度为O(n2)优化优化方法之一 ......
  • Java 基础 -- NIO 多人聊天室
    packagecom.atguigu.nio.groupchat;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.*;importjava.util.Iterator;publicclassGroupChatServer{//定义属性privateSelectorselector......
  • java方法-Arrays类
    Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,......
  • 装饰设计模式-java
      packagecn.shuishandt.opp;publicclassDecorateTest2{publicstaticvoidmain(String[]args){ Coffecoffe=newCoffe(); System.out.println(coffe.cost()+"=============>"+coffe.info()); Milkmilk=newMilk(coffe);......
  • java高精度定位系统源码 工厂人员定位系统源码
    这是一套java定位系统源码,工厂人员定位系统源码,UWB高精度定位系统源码,前后端分离架构,源码有演示。工厂人员定位系统,高精度的位置数据作为智能工厂数据流的重要组成部分,可实现对工厂内的人,车、物的精确定位,无缝追踪,智能调配与高效协同,可大幅提升工厂的精益生产及精细化管理水平,我们......
  • JavaScript
    大致路径学习JavaScript的路径可以大致分为以下几个方向:HTML和CSS:在学习JavaScript之前,您需要先掌握HTML和CSS基础知识,这是构建网页的基础。JavaScript基础:学习JavaScript的基本语法、变量和数据类型、运算符、条件语句、循环语句等。DOM编程:学习如何通过Ja......
  • 万恶的环境 二 java
    可恶的环境奇奇怪怪的问题目录可恶的环境问题描述原因总结问题描述配置java开发环境一直在报错原因两个问题1.你的java环境太多,配置了不同的java环境变量导致无法进行build2.在配置java环境时,需要配置jdk,而不是jrejdk是开发时需要部署的jre是运行时部署的下面一个是jre......
  • 渡一教育_Java每日一练:建立Statement的作用是什么、前端Console.log( Boolean(‘‘))
    系列文章目录文章目录系列文章目录题目1java部分建立Statement的作用是什么(答案在最后公布)题目1-答案==解析====答案==题目2前端js部分==答案==题目3前端js部分如下代码输出的是什么答案和解析如下==解析==题目4如果希望1监听TCP端口为9000,服务端应该怎样创建socket题目答......
  • java 中 Stack 已不推荐使用,应该用什么代替?
    为什么不推荐用Stack?java中Stack已被“废弃”,主要是因为其性能低。Stack继承自Vector,而Vector在每个方法中都加了锁,因此Stack性能低下。详细分析:算法动画图解|被"废弃"的Java栈,为什么还在用-知乎用什么代替Stack?建议使用Deque<Integer>stack=newArrayDe......