Java 数组的高级操作

Java 数组的高级操作

1 二分查找

  • 查找指定元素在数组中的位置时,若是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低
  • 二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率
  • 前提条件,数组内的元素一定要按照大小顺序排列,如果没有大小顺序,不能使用二分查找法;
package com.fcarey.sort;

import java.lang.reflect.Array;
import java.util.Arrays;

public class BinarySearch {
    public static void main(String[] args) {
        int n = 1000;
        int[] arr = new int[n];
        Arrays.setAll(arr, i -> i + 1);

        int target = 888;
        System.out.println(binarySearch(arr, target));
    }

    public static int binarySearch(int[] arr, int target) {
        // 定义查找范围
        int min = 0;
        int max = arr.length - 1;
        // 当min <= max时,循环查找
        while (min <= max) {
            // 确认中间位置,向右移1位相当于赋值减半。
            int mid = (min + max) >> 1;
            if (arr[mid] < target) {
                // arr[mid]指向的值小于目标值时,要查找右边;
                min = mid + 1;
            } else if (arr[mid] > target) {
                // arr[mid]指向的值大于目标时,要查找左边;
                max = mid - 1;
            } else {
                // arr[mid]指向的值等于目标时,要查找左边;
                return mid;
            }
        }
        // 如果min 大于max表示所查找的元素不存在。返回-1
        return -1;
    }
}

2 冒泡排序

  • 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
  • 如果有n个数据进行排序,总共需要比较n-1次
  • 每一次比较完毕,下一次的比较就会少一个数据参与
package com.fcarey.sort;

import java.util.stream.IntStream;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {3, 5, 2, 1, 4};
        bubbleSort(arr);

    }
    public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            // 外层循环控制的是次数,比数组的长度少1;
            for (int j = 0; j < arr.length - i - 1; j++) {
                // 内层循环,每层排序一位最大数
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        printArr(arr);
    }

    private static void printArr(int[] arr) {
        IntStream.range(0, arr.length).forEach(i -> System.out.print(arr[i] + " "));
    }

}

3 Arrays

方法名 说明
static int binarySearch(char[] a, int fromIndex, int toIndex, char key) 使用二分搜索算法搜索指定值的指定数组的范围。
static String toString(int[] a) 返回指定数组的内容的字符串表示形式。
static void sort(int[] a) 按照数字顺序排列指定的数组。
static void sort(int[] a, int fromIndex, int toIndex) 按升序排列数组的指定范围。
package com.fcarey.arrays;

import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        int [] arr = {3, 2,1,5,4};
        System.out.println(Arrays.toString(arr));
        
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        
        int index = Arrays.binarySearch(arr, 3);
        System.out.println(index);
        //  1. 数组必须有序
        //  2. 若查找的元素存在,返回该元素的索引,否则返回的是"-"加上所查找的元素应该在数组的插入点减1
    }
}
posted @ 2024-09-11 10:02  f_carey  阅读(9)  评论(0编辑  收藏  举报