单例模式

class Main{
    private Main(){}
    static private Main main;
    static public  Main getMain(){
        if (main==null){
            main=new Main();
        }
        return main;
    }
}

class Customer{//测试
    public static void main(String[] args) {
        Main main = Main.getMain();
        Main main1 = Main.getMain();
        System.out.println(main);
        System.out.println(main1);
    }
}

排序算法

自带

首先java有自带的函数对int型的数组进行排序

import java.util.Arrays;

class Main{
    static int[] a={3,5,8,7,4,2,9,1};
    public static void main(String[] args) {
        Arrays.sort(a);
        for (int f:a){
            System.out.println(f);
        }
    }
}

当然面试的时候肯定不能用自带的排序算法

冒泡排序

import java.util.Arrays;

class Main{
    //从前向后进行扫描
    public static void maopao1(){
        int j;//j在这里可以省性能,不必每次都去初始化
        int[] a={3,5,8,7,4,2,9,1}; 
        for (int i2=0;i2<a.length;i2++){
            for (int i=0;i<a.length-1-i2;i++){
                if (a[i]>a[i+1]){
                    //交换俩个元素
                    j=a[i];
                    a[i]=a[i+1];
                    a[i+1]=j;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }


    public static void main(String[] args) {
        maopao1();
    }
}

选择排序

import java.util.Arrays;

class Main{
    public static void main(String[] args) {
        int[] a={3,5,8,7,4,2,9,1};

        for (int start=0;start<a.length;start++){
            int minData;
            int minIndex=start;
            for (int i=start;i<a.length;i++){//从i开始,防止每次都从第一个元组开始比对
                if (a[i]<a[minIndex]){
                    minIndex=i;//记录下最小数字的角标
                }
            }
            minData=a[minIndex];//记录下最小的数字
            a[minIndex]=a[start];//和当前的记录进行交互
            a[start]=minData;
        }


        System.out.println(Arrays.toString(a));

    }
}

实现二分查找法

import java.util.Arrays;

class Main{

    public static int  seach(int []nums,int target){
        int minIndex=0;//
        int maxIndex=nums.length-1;
        if (nums[minIndex]>target||nums[maxIndex]<target){
            System.out.println("不在数组中");
            return -1;
        }
        //这里写<=的意义是当minIndex>maxIndex的时候就说明数据不在范围内
        while (minIndex<=maxIndex){
            //查看当前查找的范围区间
            System.out.println("min=:"+minIndex+",max:="+maxIndex);
            int z=(minIndex+maxIndex)/2;
            if (nums[z]==target){
                return z;//如果相等返回
            }else if(nums[z]>target) {
                maxIndex=z-1;
            }else if(nums[z]<target){
                minIndex=z+1;
            }
        }
        System.out.println("不在数组中2");
        return -1;


    }

    public static void main(String[] args) {
        int []a={1,2,3,4,6,7,8,9,10};
        int seach = seach(a,1);
        System.out.println(seach);


    }
}
Last modification:April 20, 2022
如果觉得我的文章对你有用,请随意赞赏