数组(二)

一、冒泡

package com.JavaSE.homework.Day13.buble;
​
import java.util.Arrays;
​
public class Bubble {
    public static void main(String[] args) {
        int[] arr = {12, 3, 534, 9, 54, 4, 45};
        for (int i = 0; i < arr.length - 1; i++) {//轮次,每回推一个数
            for (int j = 0; j < arr.length - 1 - i; j++) {//一一比较,将最大值推到最后
                if (arr[j] > arr[j + 1]) {//减i可以提高效率,最后的最大值不用参与比较
                    int dz = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = dz;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

int[] arr={12,3,534,9,54,4,45};//一个一个前进式比较,像冒泡一样

第一轮: 零和一比较

3 12 534 9 54 4 45

一和二比较

3 12 534 9 54 4 45

二和三比较

3 12 9 534 54 4 45

三和四比较

3 12 9 54 534 4 45

四和五比较

3 12 9 54 4 534 45

五和六比较

3 12 9 54 4 45 534 已经找出最大的,下一轮不用比较最后一个

第二轮:零和一比较

3 12 9 54 4 45

一和二比较

3 9 12 54 4 45

二和三比较

3 9 12 54 4 45

三和四比较

3 9 12 4 54 45

四和五比较

3 9 12 4 45 54 找出第二大

第三轮 找出第三大

第一次:3 9 12 4 45

第二次:3 9 12 4 45

第三次:3 9 4 12 45

第四次:3 9 4 12 45

第四轮 找出第四大

第一次:3 9 4 12

第二次:3 4 9 12

第三次:3 4 9 12

第五轮 找出第五大

第一次:3 4 9

第二次:3 4 9

第六轮 找出第六大

第一次:3 4

剩余的为最小不用再比较

二、选择

package com.JavaSE.homework.Day13.select;
​
import java.util.Arrays;
​
public class Select {
    public static void main(String[] args) {
        int[] arr = {12, 3, 534, 9, 54, 4};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i; j < arr.length-1; j++) {
                if (arr[i] > arr[j+1]) {
                    int dz = arr[i];
                    arr[i] = arr[j+1];
                    arr[j+1] = dz;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
​

12 3 534 9 54 4//一个和剩下所有比较,换位置是所有数据与本轮次主位来回换(类似打擂台),不像冒泡式逐一前进

第一轮: 零号位与其他位一一比较

零和一比较

3 12 534 9 54 4

零和二比较

3 12 534 9 54 4

零和三比较

3 12 534 9 54 4

零和四比较

3 12 534 9 54 4

零和五比较

3 12 534 9 54 4

第二轮: 一号位与其他后面的位一一比较

一和二比较

12 534 9 54 4

一和三比较

9 534 12 54 4

一和四比较

12 534 9 54 4

一和五比较

4 534 9 54 12

第三轮: 二号位与其他后面的位一一比较

二和三比较

9 534 54 12

二和四比较

9 534 54 12

二和五比较

9 534 54 12

第四轮: 三号位与其他后面的位一一比较

三和四比较

54 534 12

三和五比较

12 534 54

第五轮: 四号位与其他后面的位一一比较

四和五比较

54 534

剩余的534为最大不用再比较

三、二分查

二分查:前提条件是有序的数据

{13,25,37,41,53,68,79}

package com.JavaSE.homework.Day13.BinaryDivide;
​
public class BinaryDivide {
    public static void main(String[] args) {
        int[] arr = {13, 25, 37, 41, 53, 68, 79};
        int a = 68;
        int min = 0;
        int max = arr.length;
        while (true) {
            int mm = (max + min) / 2;
            if (a > arr[mm]) {//大于就把左范围改为中值
                min = mm;
            }
            else if (a < arr[mm]) {
                max = mm;
            }
            else if (a == arr[mm]) {
                System.out.println(mm);
                break;
            }
        }
    }
}

四、可变长参数(了解)

package com.JavaSE.homework.Day13.Variable;
​
public class VariablePar {
    public static void main(String[] args) {
        fun(1,243,423,42,4,234,234,53456,46);
    }
​
    public static void fun(int a, int... b) {
        System.out.println(a);//这里的b相当于一个数组,是个对象,不能直接输出
        for (int b1 : b) {
            System.out.println(b1);
        }
    }
}

说明:

1)在参数类型与参数名中间使用 ... 三个小点表示它是可变长参数

2)可变长参数可以接收任意个数据

3)一个方法最多只能 有一个变长参数

4)变长参数只能放在参数列表的最后

5)在方法体中,可以简单的把变长参数当作数组使用

如定义方法,计算任意个整数的和:

 

练习:

提供一个函数:把数组中所有元素以字符串形式输出输出

{1,243,423,42,4,53456,46}

字符串输出

" {1,243,423,42,4,53456,46} "

 

自定义数组的工具类:里面都是静态方法

package com.JavaSE.homework.Day13.Arrays;
​
public class TestArrays {
    public static void main(String[] args) {
        int[] arr = {1, 243, 423, 42, 4, 53456, 46};
        Arrays.print(arr);
    }
}
​
package com.JavaSE.homework.Day13.Arrays;
​
public class Arrays {
    public static void print(int[] arr) {
        System.out.print("{");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ", ");
            if (i >= arr.length - 1) {
                System.out.print(arr[i]);
                System.out.print("}");
                return;
            }
        }
    }
}

 

五、工具类Arrays

java.util.Arrays类,提供对数组的一些操作

package com.JavaSE.homework.Day13.Arrays1;
​
import java.util.Arrays;
import java.util.Random;
​
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 243, 423, 42, 4, 53456, 46, 46};
        int[][] arrTwo = {{1, 2}, {4, 7}};
        //toString
        System.out.println(Arrays.toString(arr));
        //deepToString 可以输出多维数组
        System.out.println(Arrays.deepToString(arrTwo));
        //排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //大量排序
        Random rd=new Random();
        int arrP[] = new int[1000];
        for (int i = 0; i < 1000; i++) {
            arrP[i] = rd.nextInt(100);
        }
        Arrays.parallelSort(arrP);
        System.out.println(Arrays.toString(arr));
        //扩容 这里是在产生了新的数组,所以必须赋值,不能在原有基础上修改
        int[] arr1= Arrays.copyOf(arr, arr.length*2);
        System.out.println(Arrays.toString(arr1));
        //拷贝
        int[] arr2=Arrays.copyOfRange(arr1, 3,7);
        System.out.println(Arrays.toString(arr2));
​
        //fill 替换
//        Arrays.fill(arr, 3, 7, 24);//从3到7替换为24
//        System.out.println(Arrays.toString(arr));
//        Arrays.fill(arr, 3);
    }
}

 

六、对象数组

数组存储批量数据,可以存储基本数据类型,也可以存储引用数据类型

Student类 创建对象 s1 s2 s3。。。

创建一个数组把对象存储进去

 

应用:

一个学生对应一个班级----------1对1 one to one

一个班级有很多学生-------------1对多 one to more

 

练习:双色球

1到33球,选6个红色球(不重复的)放入一个数组中

创建一个数组 放入1到33个球,使用随机数,随机选择6个,不能重复

1到16个蓝色球,选一个

蓝色球是可以跟红色球重复

模拟机选双色球一注

package com.JavaSE.homework.Day13.DoubleColBall;
​
​
import java.util.Arrays;
import java.util.Random;
​
public class DaCoBall {
    public static void main(String[] args) {
        Random rb = new Random();
        int[] arrRb = new int[6];
​
        int lb = rb.nextInt(16) + 1;
        for (int i = 0; i < arrRb.length; ) {//循环6次 挨个赋值
            boolean flag = true;//!!!!!!!!!!!!!!!!!!不能写外面 写外面也得每次重置为true 不然一旦false会死循环
            int rb1 = rb.nextInt(33) + 1;
            for (int j = 0; j < arrRb.length; j++) {//循环数组 无重复再赋值
                if (rb1 == arrRb[j]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                arrRb[i] = rb1;
                i++;
            }
        }
​
        Arrays.sort(arrRb);
        System.out.println(Arrays.toString(arrRb) + " + " + lb);
​
    }
​
}
posted @ 2019-10-20 21:45  Wollf  阅读(89)  评论(0)    收藏  举报