1. 程式人生 > 其它 >JAVA-牛客-翻轉指定字串

JAVA-牛客-翻轉指定字串

氣泡排序

圖解

第一個陣列下標元素與第二個陣列元素比較大於則交換 第二個陣列元素與第三個資料元素比較大於則交換.....
假如:
陣列長度為5 我們需要比較4次 將最大的數值放在數值的最後一個元素上 也就是 n-1
下一次冒泡的時候 因為最後的已經是最大的,前面4個元素相當於形成一個新的陣列
進行重複冒泡

Java code

import java.util.Arrays;
//氣泡排序
public class BubbleSort {
    //測試
    public static void main(String[] args) {
        //生成陣列
        int[] array = DataChecker.generaRandomArray(20,20);
        System.out.println(Arrays.toString(array));
        //氣泡排序
        sort(array);
        System.out.println(Arrays.toString(array));

    }
    /**
     *
     * @param arr int[]
     * 對陣列進行氣泡排序
     */
    public static void sort(int[] arr){
        for (int i = arr.length-1; i > 0 ; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j+1] ){
                    swap(arr,j,j+1);
                }
            }
        }
    }
    /**
     * @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;
    }
}

對數器DataChecker

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);
        //氣泡排序 ,這裡可以使用策略模式 就不用每次都改動原始碼了
        BubbleSort.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);
    }
}