数组工具类/递归

冒泡排序

 package day0505;

 

import java.util.Arrays;

import java.util.Random;

 

public class Test1 {

    public static void main(String[] args) {

        int[] arr = rand();

        System.out.println(Arrays.toString(arr));

 

        int[] result = sort(arr);

        System.out.println(Arrays.toString(result));

    }

 

    private static int[] sort(int[] arr) {

        for (int n = 0; n < arr.length - 1; n++) {

            for (int i = arr.length - 1; i > n; i--) {

                boolean flag = false;

                int temp;

                if (arr[i] < arr[i - 1]) {

                    flag = true;

                    temp = arr[i - 1];

                    arr[i - 1] = arr[i];

                    arr[i] = temp;

                }

                if (!flag) break;

            }

        }

        return arr;

    }

 

    private static int[] rand() {

        int n = new Random().nextInt(6) + 5;

        int[] arr = new int[n];

        for (int i = 0; i < arr.length; i++) {

            arr[i] = new Random().nextInt(100);

        }

        return arr;

    }

 

}

数组工具类 Java.util.arrays

 Arrays.toString

把数组连接成字符串

 

Arrays.Sort(数组)

对数组进行排序

基本类型数组:优化的快速排序算法

引用类型数组:优化的合并排序算法

 

Arrays.copyOf(数组,新的长度)

对数组进行赋值

 

Arrays.Fill(数组,)

用新值覆盖数组原值

 

数组的复制

Arrays.copyOf()

System.Arraycopy(

原数组,原数组起始位置,目标数组,目标数组起始位置,复制数据量

)

 

二维数组

 

创建二维数组

 int[][] a = new int[3][2];

新建一个外围数组长度 3

新建三个内部数组,长度都是2

内部数组存默认值0

外数组存内存地址

 

int[][] a = new int[3][];

只创建一个外围数组,长度3

外围数组中存默认值 null(空)

之后可以再新建数组,放入外围数组

a[0] = new int[3];

a[1] = new int[]{5,3,2,6,4};

a[2] = new int[]{2,4,1,6};

 

n  int[][] a = {

{6,3,7},

{3,8,5,3,8},

{2,7,9,4}

};

 

方法的递归

在方法中调用自身

f() {f();}

一步一步地简化问题,简化成最简问题,再反向倒推求出结果

一般不同时做多次递归调用,否则运算量会急剧增加

可以考虑用循环代替

 

阶乘

package day0507;

 

import java.util.Scanner;

 

public class Test1 {

    public static void main(String[] args) {

        System.out.print("输入一个整数:");

        int i = new Scanner(System.in).nextInt();

        long result = f(i);

        System.out.println(result);

    }

 

    private static long f(int i) {

        if (i == 1) return 1;

        return i * f(i - 1);

    }

} 

斐波那契数

1 1 2 3 5

package day0508;

 

import java.util.Scanner;

 

public class Test1 {

    public static void main(String[] args) {

        System.out.print("第几个斐波那契数:");

        int i = new Scanner(System.in).nextInt();

        long result = f1(i);

        System.out.println(result);

    }

 

    private static long f1(int i) {

        long a = 1;

        long b = 1;

        for (int n = 3; n <= i; n++) {

            b = a + b;

            a = b - a;

        }

        return b;

    }

 

    private static long f(int i) {

        if (i <= 2) return 1;

        return f(i - 2) + f(i - 1);

    }

}