Java之递归、数组排序

例题

1.插入一个元素
2.找出最大值以及最小值
3.合并数组
4.填充
5.删除数
6.字符串的输出

public class TestDemo1 {
    //插入元素
    public static int[] Insert(int[] array,int val,int index) {
        int[] array2 = new int[array.length+1];//定义一个新的数组array2比array的长度多1
        System.arraycopy(array, 0, array2, 0, index);//把array复制给array2
        array2[index] = val; //插入一个值
        System.arraycopy(array, index, array2, index+1, array.length-index);
        return array2;
    }
    //找出最大最小值
    public static void MaxAndMin(int[] array){
        int max = array[0];
        int min = array[0];
        for(int i =0;i<array.length;i++){
            if(max<array[i]){
                max = array[i];
            }
            if(min>array[i]){
                min = array[i];
            }
        }
        System.out.println("Max:"+max);
        System.out.println("Min:"+min);
    }
    //合并数组
    public static void MergeArray(int[] array,int[] array2){
        int[] array3 = new int[array.length+array2.length];
        //把array给array3
        for(int i = 0;i<array.length;i++){
            array3[i] = array[i];
        }
        //把array2给array3(在array之后)
        for(int j = 0;j<array2.length;j++){
            array3[j+array.length] = array2[j];
        }
        System.out.println(Arrays.toString(array3));
    }
    //填充
    public static void fill(){
        int[] array = new int[8];
        Arrays.fill(array, 10);//全部填充
        System.out.println(Arrays.toString(array));
        Arrays.fill(array, 0,3,100);//局部填充
        System.out.println(Arrays.toString(array));
    }
    //删除元素
    public static int serach(int[] array,int val){
        for(int i=0;i<array.length;i++){
            if(array[i] ==val){
                return i;
            }
        }
        return -1;
    }
    public static void delete(int[] array,int val){
        int index = serach(array,val);
        if(index == -1){
            return;
        }
        for(int i=index;i<array.length-1;i++){
            array[i] = array [i+1];
            System.out.println(array[i]);
        }
    } 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = {11,2,32,14,5};
        int[] array2 = {111,222,322,144,55};
        //排序
        Arrays.sort(array);
        //求最大最小值
        MaxAndMin(array);
        //指定插入
        int[] array6 = Insert(array,4,0);
        System.out.println(Arrays.toString(array6));
        //输出长度
        int[][] array3  = {{1,2,3},{2,3,4,5,6}};
        System.out.println(array3.length);
        System.out.println(array3[0].length);
        System.out.println(array3[1].length);

        //输出字符串的两种形式(循环)
        String[] string = new String[3];
        string[0] = "tulun";
        string[1] = "in";
        string[2] = "kulala";
        for(int i =0;i<string.length;i++){
            System.out.println(string[i]);
        }
        for(String str:string){
            System.out.println(str);
        }
        //填充(全部填充和部分填充)
        fill();
        //合并数组
        int[] array4 = {1,2,3,4,5,6};
        int[] array5 = {7,8,9,10,11,12};
        MergeArray(array4,array5);
        //System.out.println(Arrays.equals(array4, array5));
    }
}

递归

汉诺塔

public class TestDemo2 {
    //10--->12---->14---->16
    public static int age(int n){
        int tmp = 10;
        for(int i =0;i<=n;i++){
            tmp = tmp+2;
        }
        return tmp;
    }
    public static int age2(int n){
        int tmp = 0;
        if(n == 1){
            tmp = 10;
            return tmp;
        }else{
            tmp = age2(n-1)+2;
            return tmp;
    }
}
    public static int fac(int n){
        int tmp = 0;
        if(n == 1){
            tmp = 1;
            return tmp;
        }else{
            tmp = fac(n-1)*n;
            return tmp;
        }
}
    //汉诺塔
    public static void move(char pos1,char pos2){
        System.out.println(pos1+"-->"+pos2);
    }
    public static void hanio(int n,char pos1,char pos2,char pos3){
        if(n == 1){
            move(pos1,pos3);
        }else{
            hanio(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanio(n-1,pos2,pos1,pos3);
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        hanio(64,'A','B','C');
        hanio(2,'A','B','C');
        hanio(3,'A','B','C');
        }

}

这里写图片描述

fabonic数列

public class TestDemo2 {
    public static int fabonic(int n){
        //System.out.println(System.currentTimeMillis());
        int f1 = 1;
        int f2 = 1;
        int f3 = 1;
        for(int i = 2;i < n;i++){
            f3 = f1+f2;
            f1 = f2;
            f2 = f3;
        }
        //System.out.println(System.currentTimeMillis());
        return f3;
    }
    //
    public static int fabonic2(int n){

        if(n == 0 || n == 1){
            return 1;
        }
        return fabonic2(n-1)+fabonic2(n-2);

    }
        public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(System.currentTimeMillis());
        System.out.println(fabonic2(40));
        System.out.println(System.currentTimeMillis());
    }

}

这里写图片描述
fabonic2 为递归方法,一直调用前两项求和

static、final

public class TestDemo3 {
    public static void fun(){
        int data = 10;
        data++;
        System.out.println(data);
    }
    static int data2 = 0;
    int data3 = 10;
    public static void fun2(){
        data2++;
        System.out.println(data2);
    }
    public int a = 10;  //  属于对象  
    public final int B = 20;//属于对象  编译期间可以确定  立即数
    public static int c = 30;//方法区    
    public static  final int D = 40;  //方法区 
    int e = B+20;

    public String str = "hello";//str属于对象 在堆中
    public final String Str2 = "111";//Str2属于对象  "111"在常量池中
    public static String str3 = "java";//方法区 
    public static final String STR4 = "baby";//方法区 

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i =0;i<10;i++){
            fun2();
        }
        TestDemo3 t1 = new TestDemo3();
        String str3 = "helloworld";

        String str = "hello";
        String str2 = str+"world";

        final String str4 = "hello";
        String str5 = "hello"+"world";

        System.out.println(str3 == str2);//运行结果为false

        System.out.println(str3 == str5);//运行结果为true
    }
}

直接插入排序

public class TestDemo4 {
    public static void insrtSort(int[] array){
        int tmp = 0;
        int j;
        for(int i = 1;i < array.length;i++){
            tmp = array[i];//从i号位置开始进行比较 
            for(j = i-1;j >= 0;j--){
                if(array[j] > tmp){
                    array[j+1] = array[j];
                }else{//每次排序过后前面已经有序  找到第一个比tmp小的
                    break;
                }
            }
            array[j+1] = tmp;//  tmp小的    tmp   放到当前位置+1
        }

    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = {12,3,43,65,6,7,8,4,9};
        insrtSort(array);
        System.out.println(Arrays.toString(array));
    }

}

思想:
这里写图片描述
时间复杂度:O(n^2)
稳定性:不稳定

选择排序

public class TestDemo5 {
    public static void selectSort(int[] array){
        int tmp = 0;
        int minIndex = 0;
        for(int i = 0;i < array.length;i++){
            minIndex = i;
            for(int j = i+1;j < array.length;j++){
                if(array[minIndex] > array[j]){
                    tmp = array[minIndex];
                    array[minIndex] = array[j];
                    array[j] = tmp;
                }
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = {12,3,43,65,6,7,8,4,9};
        selectSort(array);
        System.out.println(Arrays.toString(array));
    }

}

思想:
这里写图片描述
时间复杂度:O(n^2)
稳定性:不稳定

猜你喜欢

转载自blog.csdn.net/qq_39475906/article/details/79987975