数组的进一步探究 ——Java

数组的进一步探究 ——Java

文章目录

  • 数组的进一步探究 ——Java
    • 深度拷贝 ,浅拷贝
      • 深度拷贝
      • 浅拷贝
    • 数组的二分查找
        • 图示解释:
        • 代码:
    • 数组的经典冒泡排序
      • 代码:
    • 偶数在前,奇数在后
      • 代码:
    • 最后:
      • 每博一文案


深度拷贝 ,浅拷贝

  • 这里简单介绍一下深度拷贝,浅拷贝

深度拷贝

  • 简单的说就是拷贝后的结果的改变,不会影响原先拷贝对象的值

数组的进一步探究 ——Java_第1张图片


浅拷贝

  • 同样简单说就是与深拷贝相反的:
  • 就是通过拷贝的后的结果自身的改变,结果会影响原先拷贝的对象,一般为引用类型

数组的进一步探究 ——Java_第2张图片


数组的二分查找

  • 数组中常见的一些查找方式
  • 二分查找又称“折半查找”
  • 二分查找有一个大前提就是:
  • 该数组必须要为一个有序的数组,才能使用二分查找
图示解释:

数组的进一步探究 ——Java_第3张图片


代码:
public class Study06 {
 public static int binarySearch (final int[] arr, final int key) {
        int left = 0;  // 数组的起始位置
        int right = arr.length-1; // 数组有效数值的最后位置
        while(left <= right ) {
            int mid = (left + right) >>> 1;
            if(arr[mid] > key ) {
                right = mid - 1;
            } else if(arr[mid] < key ) {
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;              // 数组没有下标为 -1 的位置,所以代表没有找到
    }

    public static void main (String[] args) {
        Study06 binarySearch = new Study06();
        int[] arr = new int[]{1,2,5,6,9,12,19,20};
        int ret = Study06.binarySearch(arr,9);
        System.out.println("下标:"+ret);

    }
}


数组的经典冒泡排序

  • 冒泡的排序的就是每次排序把最大值,或者是最小值放把最后面

数组的进一步探究 ——Java_第4张图片

  • 优化一下
  • 当所给的数组本身就是有序的,我们就不要再进行不必要的排序了,
  • 或者当我们排序了前几次就已经实现了,有序了,同样我们后面也不要进行不必要的排序了
  • 我们可以定义一个Boolean 类型,通过它记录是否已经有序了,有序了,我们就不用再排序了

代码:

public class Study06 {
public static void bubbleSort(int[] arr ) {
        for (int i = 0; i < arr.length - 1; i++) {
            boolean flg = false;
            for (int j = 0; j < arr.length-1-i; j++) {
                if(arr[j] > arr[j+1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    flg = true;
                }
            }
            if(flg == false) {
                break;
            }

        }

    }
    
    public static void main (String[] args) {
        Study06 bubbleSort = new Study06();
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
        System.out.println("排序之前:"+Arrays.toString(arr));
        Study06.bubbleSort(arr);
        System.out.println("排序之后:"+Arrays.toString(arr));
    }
}

偶数在前,奇数在后

  • 实现一个偶数在前,奇数在后面
  • 方案;
    • 定义两个指针
    • 一个在最开头,遇到奇数就停止,另一个在最后面,遇到偶数停止,
    • 最后通过它们停止的后交换数值

代码:

public class Study06 {
//     一个数组的偶数放到最前面,奇数放到后面
    public static void swap (int[] arr) {
        int left = 0;
        int right = arr.length-1;
        while(left < right) {
            while(left < right && arr[left] % 2 == 0) {
                left++;
            } // left 为奇数时跳出,停止
            while(left < right && arr[right] % 2 !=0) {
                right--;
            } // right 为偶数时,跳出,停止
            if(left < right) { // 奇数,偶数交换位置
                int tmp = arr[left];
                arr[left] = arr[right];
                arr[right] = tmp;
            }
        }

    }
    public static void main (String[] args) {
        Study06 swap = new Study06();
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
        System.out.println("变换之前:"+Arrays.toString(arr));
        Study06.swap(arr);
        System.out.println("变换之后:"+Arrays.toString(arr));
    }
}

最后:

每博一文案

人与人之间为什么会疏远,大概是因为在环境的影响下,渐渐的三观已经不同,你们倾吐着各自的烦恼和生活。

而对方却再也无法感同身受,这并非你们任何一方的过错,只是时光不宽容,你们都来自于山川,湖海,却有各自的旅途,真诚要走,不必失落,也不必难过。

只要曾经拥有过美好,我们就依旧还是朋友。

—————— 一禅心灵庙语

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!

你可能感兴趣的:(Java,数据结构,算法,java)