欢迎访问宙启技术站
智能推送

数组拷贝,二分法查找

发布时间:2023-05-16 20:04:34

数组是程序中常用的数据结构之一,由一维数据元素构成的有限序列,可以对数组进行各种操作,如添加、删除、修改和查找等。其中,数组的拷贝和二分法查找是比较常用的操作。

一、数组拷贝

数组拷贝是将一个数组中的元素复制到另一个数组中,常用的方式有两种:浅拷贝和深拷贝。

1.浅拷贝

浅拷贝是指拷贝的是数组的引用,即两个数组指向同一块物理内存,修改任意一个数组的元素,都会影响到另一个数组的元素。浅拷贝可以直接使用系统函数arraycopy()来实现,其方法声明如下:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

其中,src表示源数组,srcPos表示从源数组中复制的起始位置,dest表示目标数组,destPos表示从目标数组的哪个位置开始复制,length表示复制的长度。示例代码如下:

int[] srcArray = {1, 2, 3, 4, 5};

int[] destArray = new int[5];

System.arraycopy(srcArray, 0, destArray, 0, 5);

2.深拷贝

深拷贝是指拷贝的是数组的值,即两个数组虽然元素相同,但是数组指向的是不同的物理内存地址,修改一个数组的元素不会对另一个数组造成影响。深拷贝可以通过for循环来遍历源数组,并创建一个新的数组来实现。示例代码如下:

int[] srcArray = {1, 2, 3, 4, 5};

int[] destArray = new int[5];

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

    destArray[i] = srcArray[i];

}

二、二分法查找

二分法查找也叫折半查找,是指在一个有序的数组中,将数组分成左右两部分,每次取中间位置的元素进行比较,如果等于要查找的元素,则返回其下标,否则如果比要查找的元素小,则在右边区间查找,否则在左边区间查找。以此类推,直至找到为止。

二分法查找的时间复杂度为 O(log n),比线性查找的 O(n) 要快得多,适用于大规模数据的查找。

示例代码如下:

public static int binarySearch(int[] arr, int key) {

    int low = 0; // 左边界

    int high = arr.length - 1; // 右边界

    while (low <= high) {

        int mid = (low + high) / 2; // 中间点

        if (key == arr[mid]) {

            return mid; // 找到

        } else if (key < arr[mid]) {

            high = mid - 1; // 在左边区间查找

        } else {

            low = mid + 1; // 在右边区间查找

        }

    }

    return -1; // 未找到

}

总之,数组拷贝和二分法查找是 Java 程序中常用的操作,掌握这两个操作是学习 Java 语言的必要基础。