顺序查找法

    Java
    复制代码

    1
    /*
    2
    顺序查找法
    3
    @param objs 数组
    4
    @param obj 要查找的结果 */
    5
    public static int search(Object[] objs, Object obj){
    6
    for (int i = 0; i < objs.length; i++) {
    7
    if (obj.equals(objs[i]))
    8
    return i;
    9
    }
    10
    return -1;
    11
    }

    二分查找法

    Java
    复制代码

    1
    /*
    2
    二分查找法
    3
    @param numbers 数组
    4
    @param number 要查找的数
    5
    @param startIndex 开始下标
    6
    @param endIndex 结束下标 */
    7
    public static int search(double[] numbers, double number, int startIndex, int endIndex) {
    8
    if (numbers[startIndex] > number || numbers[endIndex] < number) {
    9
    //开始下标的值大于要查找的值 或 结束下标的值小于要查找的值
    10
    System.out.println(“您要查找的内容不在此数组中”);
    11
    return -1;
    12
    }
    13
    if (numbers[(startIndex + endIndex) / 2] == number) {
    14
    //如果中间位置的数值等于要查找的数
    15
    //直接返回下标
    16
    return (startIndex + endIndex) / 2;
    17
    } else if (numbers[(startIndex + endIndex) / 2] > number) {
    18
    //如果中间位置的数值大于要查找的数
    19
    //在前半部分查找
    20
    return search(numbers, number, startIndex, (startIndex + endIndex) / 2);
    21
    } else{
    22
    //如果中间位置的数值小于要查找的数
    23
    //在后半部分查找
    24
    return search(numbers, number, (startIndex + endIndex) / 2, endIndex);
    25
    }
    26
    }

    冒泡排序

    Java
    复制代码

    1
    public static void sort(int[] arr){
    2
    for (int j = 0; j < arr.length - 1; j++) {
    3
    //外层循环控制轮次
    4
    for (int i = 0; i < arr.length - 1 -j; i++) {
    5
    //内层循环 比较相邻数值的大小
    6
    if (arr[i] > arr[i + 1]) {
    7
    int max = arr[i];
    8
    arr[i] = arr[i + 1];
    9
    arr[i + 1] = max;
    10
    }
    11
    }
    12
    }
    13
    }

    斐波那契数列

    Java
    复制代码

    1
    /*
    2
    斐波那契数列 F(n)
    3
    @param n n 的值
    4
    @return F(n) 的值
    5
    */
    6
    public static int fibonacci(int n){
    7
    if (n < 0)
    8
    return -1;
    9
    if (n == 0){
    10
    return 1;
    11
    }else if (n == 1){
    12
    return 1;
    13
    }else {
    14
    return fibonacci(n - 1) + fibonacci(n - 2);
    15
    }
    16
    }

    汉诺塔

    Java
    复制代码

    1
    /*
    2
    @param n 层数
    3
    @param a 所在位置
    4
    @param b 借助位置
    5
    @param c 目标位置 /
    6
    public void move(int n,char a,char b,char c){
    7
    if(n == 1){
    8
    //只有一层 直接移动
    9
    System.out.println(++count + “:” + a + “->” + c);
    10
    }else{
    11
    //除最后一层移动到目标位置
    12
    move(n - 1, a, c, b);
    13
    //最后一层移到目标位置
    14
    System.out.println(++count + “:” + a + “->” + c);
    15
    //除最后一层移动到目标位置
    16
    move(n - 1, b, a, c);
    17
    }
    18
    }

    八皇后

    Java
    复制代码

    1
    //下标表示行数, 数值代表列数(从0开始)
    2
    private int[] queen;
    3

    4
    /*
    5
    八皇后问题
    6
    @param n 行数和列数 /
    7
    public void setQueen(int n) {
    8
    queen = new int[n];
    9
    //将数值初始化为 -1 表示当前位置未放置皇后
    10
    for (int i = 0; i < n; i++) {
    11
    queen[i] = -1;
    12
    }
    13
    //行数
    14
    int row = 0;
    15
    while (true) {
    16
    // 当前行放置皇后位置, 列数+1
    17
    queen[row] ++;
    18
    // 判断当前皇后位置是否越界
    19
    if (queen[row] >= n) {
    20
    // 越界则进行回溯
    21
    if (row > 0) {
    22
    // 设置当前行皇后为初始无放置状态
    23
    queen[row] = -1;
    24
    // 回溯
    25
    row—;
    26
    continue;
    27
    } else {
    28
    // row < 0 结束循环
    29
    break;
    30
    }
    31
    }
    32

    33
    //未越界, 判断是否冲突
    34
    if (!isConflict(row)) {
    35
    // 未冲突则放置
    36
    row++;
    37
    // 判断是否为了最大行
    38
    if (row >= n) {
    39
    // 最大行 输出正确结果
    40
    System.out.println(Arrays.toString(queen));
    41
    //回溯
    42
    row—;
    43
    }
    44
    //不为最大行进入下次循环
    45
    }
    46
    }
    47
    }
    48

    49
    /*
    50
    判断与之前放置的皇后是否冲突 */
    51
    public boolean isConflict(int k) {
    52
    for (int i = k - 1; i > -1; i—) {
    53
    if (queen[k] == queen[i] || Math.abs(queen[k] - queen[i]) == Math.abs(k - i)) {
    54
    return true;
    55
    }
    56
    }
    57
    return false;
    58
    }

    单例模式

    1. IoDH

    Java
    复制代码

    1
    public class SingletonIoDH {
    2

    3
    private SingletonIoDH() {
    4
    }
    5

    6
    private static class SingletonUtil{
    7
    private static final SingletonIoDH instance = new SingletonIoDH();
    8
    }
    9

    10
    public static SingletonIoDH getInstance(){
    11
    return SingletonUtil.instance;
    12
    }
    13
    }

    2. 双重校验锁

    Java
    复制代码

    1
    public class SingletonDouble {
    2
    private volatile static SingletonDouble singleton;
    3

    4
    private SingletonDouble() {
    5
    }
    6

    7
    public static SingletonDouble getInstance() {
    8
    if (singleton == null) {
    9
    synchronized (SingletonDouble.class) {
    10
    if (singleton == null)
    11
    singleton = new SingletonDouble();
    12
    }
    13
    }
    14
    return singleton;
    15
    }
    16
    }