选择排序

选择排序

遍历数组将最小的下表找出来 与第一个数组下标元素互换

此时第一个元素为最小,在下个元素开始重复次操作

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次测试 需要多测,来判断算法的正确性

posted @ 2021-01-20 17:46  immortal_mode  阅读(51)  评论(0)    收藏  举报