[notes] the algorithm of ox guest network

Keywords: Java

Time complexity

Bubble sort

public static void bubbleSort(int[] arr){
        if(arr == null || arr.length < 2)
            return;
        for(int end = arr.length-1; end > 0; end--){
            for(int i = 0; i < end; i++)
                if(arr[i] > arr[i+1])
                    swap(arr,i,i+1);
        }
    }

Selection sort

public static void selectionSort(int[] arr){
        if(arr == null || arr.length < 2)
            return;
        for(int i = 0; i < arr.length-1; i++){
            int minIndex = i;
            for(int j = i+1; j < arr.length; j++)
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            swap(arr, i, minIndex);
        }
    }

Insertion sort

public static void insertionSort(int[] arr){
        if(arr == null || arr.length < 2)
            return;
        for(int i = 1; i < arr.length; i++)
            for(int j = i - 1;j >= 0 && arr[j] > arr[j + 1]; j--)//One by one
                swap(arr, j, j + 1);
    }

Logarithmic device

  1. Random generators: generating random arrays
  2. Prepare an absolutely correct method: do not need to consider the time complexity, and make sure it is absolutely correct.
  3. The method of comparison
  4. Compare method a and method b many times to verify whether method a is correct
  5. If there is an error in the comparison of samples, which method of printing sample analysis is wrong
  6. When the number of samples is large, the comparison test is still correct, and it can be determined that method a is correct.

Bubble sorting as an example

  1. Random generator

    public static int[] generateRandomArray(int size, int value){
        int[] arr = new int[(int) ((size + 1) * Math.random())];
        for (int i = 0; i < arr.length; i++)
            arr[i] = (int)((value + 1) * Math.random()) - (int)(value * Math.random());//Just random numbers.
        return arr;
    }
  2. Prepare an absolutely right approach

    public static void rightMathod(int[] arr){
        Arrays.sort(arr);
    }
  3. The method of comparison

    //Judge the equality of two arrays
    public static boolean isEqual(int[] arr1, int[] arr2){
        if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null))
            return false;
        if (arr1 == null && arr2 ==null)
            return true;
        if (arr1.length != arr2.length)
            return false;
        for (int i = 0; i < arr1.length; i++) {
            if(arr1[i] != arr2[i])
                return false;
        }
        return true;
    }
  4. //Main
    public static void main(String[] args) {
        //Set oneself
        int testTime = 500000;
        int size = 10;
        int value = 100;
        boolean succeed = true;
        for (int i = 0; i < testTime; i++){
            int[] arr1 = generateRandomArray(size,value);//generator
            int[] arr2 = copyArray(arr1);//Copy arr1
            int[] arr3 = copyArray(arr1);
            bubbleSort(arr1);
            rightMathod(arr2);
            if(!isEqual(arr1,arr2)){
                succeed = false;
                printArrays(arr3);//Print out the wrong sample
                break;
            }        
        }
        System.out.println(succeed ? "Nice!" : "Error!");
    }
    
    //Replicated array
    public static int[] copyArray(int[] arr){
        if (arr == null)
            return null;
        int[] res = new int[arr.length];
        for (int i = 0; i< arr.length; i++)
            res[i] = arr[i];
        return res;
    }
    
    //Print samples
    public static int[] printArrays(int[] arr){
        ...
    }

Posted by We Must Design on Fri, 01 Nov 2019 03:54:28 -0700