冒泡排序算法,简单明了哦。

package Day2.MethodPackage.ArrayPackage;/**
 * <h>IdeaNewStart</h>
 *
 * @author : AChun
 * @date : 2021-12-18 17:40
 * @since : 1.8
 **/

import sun.awt.windows.WPrinterJob;

import java.util.Random;
import java.util.Scanner;


/**
 * 类成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词意外,后面的单词首字母大写
 * 局部变量:首字母小写和驼峰原则
 * 常量:大写字母和下划线:PI_VALUE
 * 类名:首字母大写和驼峰原则:Man,GoodMan
 * 方法名:首字母小写和驼峰原则:run(),runRun()
 * */
public class Bubble_pricatice {
    public static void main(String[] args) {
        //既然要做排序,那么就不能只是做固定好的数组,数组里的参数的是自己从控制台录入的信息,这样方便测试
        //1.调用Scanner方法创建初始化对象scanner,记得末尾写个  (对象名).close关闭控制台录入功能
        Scanner scanner=new Scanner(System.in);
        //2.定义一个空的数组,给它定义一个数组长度控制范围
        //此时定义的数组arr1的长度为5,但是,有个注意点:[0,1,2,3,4],计算机里面把0算作第一位元素
        int[] arr1=new int[5];
        //3.写一个方法,将控制台录入的信息传给数组
        addarr(scanner,arr1);//方法名(参数对象1,参数对象2...),你调用的方法需要什么参数,就写什么,这里我需要用到scanner对象和数组arr1,就写了两个
        //我用的idea编程的,所以鼠标点击需要创建的方法任意位置上,alt加回车直接创建了私有方法
        printarr(arr1);//打印出排序前的数组信息
        //4.调用冒泡排序方法
        bubble_Sort(arr1);
        //5.打印出原先数组内的信息,再打印出通过冒泡排序后的数组信息
        printarr(arr1);//打印出排序后的数
    }
    /*****冒泡排序******/
    //冒泡排序方法,老样子,公共方法,也可以私有,但是私有只给特定的数组对象使用不太自私了吗?
    public static void bubble_Sort(int[] arr) {//
        //其实吧,所谓的冒泡排序,你可以理解为降序排序,将相邻的两个数据进行比较,后面的大于前面的,就互换位置
        /*****换位置******/
        //要会换位置,水杯换水原则,两个满杯子互换水,肯定需要第三个空杯子来互换杯子里的水嘛
        //0.1 定义一个空的变量,用来换值使用
        int empty=0;
        //0.2 外层循环,判断循环几次
        /*
        * [1,12,3,6,15]
        *   >
        * [12,1,3,6,15]
        *      >
        * [12,3,1,6,15]
        *        >
        * 以此类推,第一轮排序只需要遍历4次,就是 (数组对象名).length-1次
        * */
        for (int i = 0; i < arr.length-1; i++) {
            //0.3 在第一轮遍历的基础上,前面遍历好的数据在互相冒泡遍历
            for (int j = 0; j < arr.length-1; j++) {
                //判断大小互换位置
                if(arr[j]<arr[j+1]){//如果前面这个数小于后面那个数
                    empty=arr[j];//将前面那个小的数传值给empty变量,此时arr[i]这个变量就是空值了,因为杯子里的水倒给了empty杯子了
                    arr[j]=arr[j+1];//将后面这个大的数“倒”给前面那个已经成为空值的arr[i]“空杯子”
                    arr[j+1]=empty;//最后将empty"杯子"里的小的"水"倒给后面那个"杯子"
                }
            }
        }
        System.out.println("冒泡结束啦!");
    }

    //录入数据信息
    private static void addarr(Scanner scanner, int[] arr1) {
        //写一个for循环,循环次数要小于数组长度: (数组名).length代表数组长度
        for (int i = 0; i < arr1.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数据:");//数组里读取元素从0索引开始算作第一位,比如说你取第五个元素,其实取得是数组里的4号索引位置的元素
            arr1[i]=scanner.nextInt();//将控制台录入的信息挨个传给从arr1数组中遍历来的元素
        }
    }
    //打印数组信息,此时定义一个公共方法,任何数组对象都能调用
    public static void printarr(int[] arr){//此时形参代表的就是整个数组,任何数组都可以调用它打印出数组信息
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //简单的就这样输出
//            System.out.print(arr[i]);

            //逼格高一点用三元运算符
            /*****三元运算符******/
            System.out.print(i==arr.length-1?arr[i]:arr[i]+",");//三元运算符: 例如:a>b?a:b,如果a真的大于b,那么输出a,如果a不大于b,就输出b;
            //三元运算符:?问号前面条件为真就输出":"前面的,条件为假就输出":"后面的

            //逼格再高一点可以用forEach方法
            //逼格更厉害的用集合做,集合遍历的方法中有个labda表达式,更快更强
        }
        System.out.println("]");
    }
}

运行结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值