1. 程式人生 > 實用技巧 >基於react搭建自己的blog網站(一)

基於react搭建自己的blog網站(一)

選擇排序

遍歷陣列將最小的下表找出來 與第一個陣列下標元素互換

此時第一個元素為最小,在下個元素開始重複次操作

import java.util.Arrays;

//選擇排序
public class SelectedSort {
    //測試
    public static void main(String[] args) {
        //定義一個數組
        int[] arr = DataChecker.generaRandomArray(10,100);
        System.out.println(Arrays.toString(arr));
        sort(arr);
        System.out.println("Selected sort after:");
        System.out.println(Arrays.toString(arr));
    }

    /**
     * @param arr  int[]
     * @param i    需要交換的陣列下標
     * @param j    同上
     */
     public static void swap(int[] arr,int i,int j){
        //交換
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    /**
     *
     * @param arr int[]
     * 對陣列進行選擇排序
     */
    public static void sort(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            //找到陣列種最小的下標,預設是0
            int minPosition = i;
            //找到陣列種最小值的index
            for (int j = i+1; j <arr.length ; j++) {
                if (arr[j] < arr[minPosition]) {
                    //將小的下標賦值給minPosition
                    minPosition = j;
                }
            }
            //交換
            swap(arr,i,minPosition);

        }
    }
}

這裡的DataChecker.class 是對數器 ,判斷演算法是否正確

import java.util.Arrays;
import java.util.Random;

//對數器
public class DataChecker {

    /**
     * @param size 陣列大小
     * @return  隨機陣列
     */
    public static int[] generaRandomArray(int size){
        return generaRandomArray(size,size);
    }

    /**
     *
     * @param size size 陣列的大小
     * @param randomSize  隨機數值的大小
     * @return int[]
     */
    public static int[] generaRandomArray(int size,int randomSize){
        Random random = new Random();
        int[] arr = new int[size];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(randomSize);
        }

        return arr;
    }

    /**
     *
     * @param arr1 int[]
     * @param arr2 int[]
     * @return  比較兩個陣列的值是否相同
     */
    public static boolean check(int[] arr1,int[] arr2){
        //工具類進行排序
        Arrays.sort(arr1);
        //選擇排序
        SelectedSort.sort(arr2);

        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]){
                return false;
            }
        }
        return true;
    }
    //測試
    public static void main(String[] args) {
        //儲存正確的次數
        int right = 0;
        for (int i = 0; i < 10000; i++) {
            System.out.println("第"+i+"次隨機生成進行比較 ");
            int[] arr1 = DataChecker.generaRandomArray(100);

            int[] arr2 = Arrays.copyOf(arr1,arr1.length);

            if (check(arr1,arr2)) right++;

        }
        System.out.println("right: " + right);
    }
}

這裡進行10000次測試 需要多測,來判斷演算法的正確性