冒泡排序

冒泡排序

图解

第一个数组下标元素与第二个数组元素比较大于则交换 第二个数组元素与第三个数据元素比较大于则交换.....
假如:
数组长度为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);
    }
}

posted @ 2021-01-20 18:36  immortal_mode  阅读(101)  评论(0)    收藏  举报