插入排序

插入排序

实现

从第一个元素与第零个元素比较,如果小则交换

第二个元素与第一个比较如果小,交换,在和第0个比较进行交换

依次类推。。。

代码

import java.util.Arrays;

public class InsertSort {

    public static void main(String[] args) {
        //随机生成数组
        int[] array = DataChecker.generaRandomArray(10);
        //打印
        System.out.println(Arrays.toString(array));
    
        sort(array);

        System.out.println(Arrays.toString(array));
    }

    /**
     * 插入排序
     * @param array int[]
     */
    public static void sort(int[] array){
        for (int i = 1; i <array.length ; i++) {
            insert(array,i);
        }
    }

    /**
     * 将给定的下标元素进行插入排序
     * @param arr   数组
     * @param index 下标
     */
    public static void insert(int[] arr,int index){
        for (int i = index; i > 0 ; i--) {
            if (arr[i] < arr[i-1]){
                swap(arr,i,i-1);
            }
        }
    }

    /**
     * 交换
     * @param arr int[]
     * @param i   i
     * @param j   j
     */
    public static void swap(int[] arr,int i,int j){
        //交换
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

对数器

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);
        //插入排序
        InsertSort.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);
    }
}

it's ok

posted @ 2021-01-23 16:53  immortal_mode  阅读(67)  评论(0)    收藏  举报