数组常见算法

一、数组翻转:

1.概述:数组对称索引位置上的元素互换

写法一:

java 复制代码
public class Reverse {

    public static void main(String[] args) {
        
      int[] arr = {1, 2, 3, 4, 5, 6, 7};
        for (int min = 0, max = arr.length-1; min < max; min++, max--) {
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

    }

}

写法二:

java 复制代码
public class ReverseT {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        int[] arrN = reverse(arr);
        for (int i = 0; i < arrN.length; i++) {
            System.out.print(arrN[i] + " ");
        }

    }
    public static int[] reverse(int[] arr){
        for (int min = 0,max = arr.length-1; min < max; min++,max--) {
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        return arr;
    }

}

写法二用了新定义一个静态方法,然后用主类去调用方法来实现,但是要注意的是,直接在方法参数处是不允许初始化数组的,所以写法二会繁琐很多。

2.冒泡排序:进行数组元素的大小比较,然后进行位置交换;冒泡是相邻元素进行比较换位。

java 复制代码
public class Bubble {

    public static void main(String[] args) {

        int[] arr = {7,6,5,4,3,2,1};
        for (int l = 0; l < arr.length-1; l++) {
            for (int i = 0; i < arr.length-1; i++) {
                if (arr[i] > arr[i+1]){
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
        for (int j = 0; j < arr.length; j++) {
            System.out.print(arr[j] + " ");
        }

    }


}

3.二分查找:

(1)前提:数组中的数据必须是有序的(所以在代码里,嵌套了上面的冒泡排序);

(2)思想:a.老式查找需要遍历数组,效率低;

b.二分法可以每次从中间数组查找,每次查询可以淘汰一半数据;

java 复制代码
public class Binary {
    public static void main(String[] args) {

        int[] arr = {3, 7, 5, 4, 3, 2, 1};
        for (int l = 0; l < arr.length - 1; l++) {
            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        int index = binary(arr, 7);
        System.out.println(index);

    }
    public static int binary(int[] arr, int data){
        int max = arr.length-1;
        int min = 0;
        int mid = 0;
        while (min <= max){
            mid = (min + max)/2;
            if (data > arr[mid]){
                min = mid + 1;
            }else if(data < arr[mid]){
                max = mid -1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}
相关推荐
程序员清风4 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5515 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
颜酱5 小时前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub9 小时前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
华仔啊10 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing10 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员