Java 基础 30 数组冒泡排序和Arrays工具类

2018-02-02  本文已影响25人  小熊先生很不开心

1.1 数组的冒泡排序

  冒泡排序:就是相邻的两个元素进行两两比较,把元素值大的元素依次向后排.

相关链接
维基百科

1.1.1 数组排序之冒泡排序原理图解

BubbleSort.png

1.1.2 数组排序之冒泡排序代码实现

1.1.2.1案例代码


  package com.itheima;
/*
 * 数组排序:(冒泡排序)
 */
public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个int类型的数组
        int[] arr = {24,69,80,57,13};
        
        /*
        //第一次比较
        //arr.length-1是为了防止索引越界
        //arr.length-1-0是为了减少比较的次数
        for(int x=0; x<arr.length-1-0; x++) {
            //ArrayIndexOutOfBoundsException
            if(arr[x] > arr[x+1]) {
                //交换数据
                int temp = arr[x];
                arr[x] = arr[x+1];
                arr[x+1] = temp;
            }
        }
        //调用遍历方法
        System.out.println("第一次比较完毕:");
        printArray(arr);
        
        //第二次比较
        //arr.length-1是为了防止索引越界
        //arr.length-1-1是为了减少比较的次数
        for(int x=0; x<arr.length-1-1; x++) {
            //ArrayIndexOutOfBoundsException
            if(arr[x] > arr[x+1]) {
                //交换数据
                int temp = arr[x];
                arr[x] = arr[x+1];
                arr[x+1] = temp;
            }
        }
        //调用遍历方法
        System.out.println("第二次比较完毕:");
        printArray(arr);
        
        //第三次比较
        //arr.length-1是为了防止索引越界
        //arr.length-1-2是为了减少比较的次数
        for(int x=0; x<arr.length-1-2; x++) {
            //ArrayIndexOutOfBoundsException
            if(arr[x] > arr[x+1]) {
                //交换数据
                int temp = arr[x];
                arr[x] = arr[x+1];
                arr[x+1] = temp;
            }
        }
        //调用遍历方法
        System.out.println("第三次比较完毕:");
        printArray(arr);
        
        //第四次比较
        //arr.length-1是为了防止索引越界
        //arr.length-1-3是为了减少比较的次数
        for(int x=0; x<arr.length-1-3; x++) {
            //ArrayIndexOutOfBoundsException
            if(arr[x] > arr[x+1]) {
                //交换数据
                int temp = arr[x];
                arr[x] = arr[x+1];
                arr[x+1] = temp;
            }
        }
        //调用遍历方法
        System.out.println("第四次比较完毕:");
        printArray(arr);
        */
        
        //用循环改进
        /*
        for(int y=0; y<4; y++) {
            for(int x=0; x<arr.length-1-y; x++) {
                if(arr[x] > arr[x+1]) {
                    //交换数据
                    int temp = arr[x];
                    arr[x] = arr[x+1];
                    arr[x+1] = temp;
                }
            }
        }
        */
        
        /*
        //循环做的次数不能写固定的值,用arr.length-1改进即可
        for(int y=0; y<arr.length-1; y++) {
            for(int x=0; x<arr.length-1-y; x++) {
                if(arr[x] > arr[x+1]) {
                    //交换数据
                    int temp = arr[x];
                    arr[x] = arr[x+1];
                    arr[x+1] = temp;
                }
            }
        }
        printArray(arr);
        */
        
        //如果我有多个数组要排序,每个数组写这样的一段代码,太麻烦,怎么办呢
        //用方法改进
        sort(arr);
        System.out.println("排序后:");
        printArray(arr);
    }
    
    /*
     * 两个明确:
     *      返回值类型:void
     *      参数列表:int[] arr
     */
    public static void sort(int[] arr) {
        for(int x=0; x<arr.length-1; x++) {
            for(int y=0; y<arr.length-1-x; y++) {
                if(arr[y] > arr[y+1]) {
                    int temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;
                }
            }
        }
    }
    
    /*
     * 数组遍历
     */
    public static void printArray(int[] arr) {
        System.out.print("[");
        for(int x=0; x<arr.length; x++) {
            if(x==arr.length-1) {
                System.out.print(arr[x]);
            }else {
                System.out.print(arr[x]+", ");
            }
        }
        System.out.println("]");
    }
}

1.2 Arrays工具类

1.2.1 Arrays类的概述和使用

1.2.1.1 案例代码

package com.itheima;

import java.util.Arrays;

/*
 * Arrays:提供了对数组操作的各种方法。
 * public static String toString(int[] a):把数组转成字符串
 * public static void sort(int[] a):对数组进行升序排序
 */
public class ArraysDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {24,69,80,57,13};
        
        //public static String toString(int[] a):把数组转成字符串
        System.out.println("排序前:"+Arrays.toString(arr));
        
        //public static void sort(int[] a):对数组进行升序排序
        Arrays.sort(arr);
        
        System.out.println("排序后:"+Arrays.toString(arr));
    }
}

1.2.2 Arrays类中构造方法的问题

Arrays类中真的没有构造方法吗?

  Arrays类中有构造方法,只不过构造方法被private修饰,外界是无法使用的。因为外界无法使用,所以帮助文档中就看不到。

通过查看源码,我们找到了如下的内容:

private Arrays() {}
上一篇下一篇

猜你喜欢

热点阅读