选择排序

package class01;

import java.util.Arrays;

/**
 * 选择排序
 * 概述:n个数,n次循环(10个数就是10次循环),每次循环找出本轮的最小值,和本轮的第一个位置的数,交换。周而复始。直至该乱序数组有序。
 */
public class Code01_SelectionSort {
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {

            return;
        }
        int N = arr.length;
        for (int i = 0; i < N - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < N; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr, i, minIndex);
        }
    }

    public static void main(String[] args) {
        int testTimes = 10;
        int maxSize = 15;
        int maxValue = 100;
        boolean flag = true;
        for (int i = 0; i < testTimes; i++) {
            int[] arr = generateRandomArr(maxSize, maxValue);
            int[] arr1 = copyArr(arr);
            int[] arr2 = copyArr(arr);
            Arrays.sort(arr1);
            selectionSort(arr2);
//            printArr(arr);
//            printArr(arr1);
//            printArr(arr2);
            flag = isEquals(arr1, arr2);
            if (!flag) {
                printArr(arr);
                printArr(arr1);
                printArr(arr2);
                break;
            }
        }
        System.out.println(flag ? "Nice!" : "Fucking fucked!");
        int[] arr = generateRandomArr(maxSize, maxValue);
        printArr(arr);
        selectionSort(arr);
        printArr(arr);
    }

    public static boolean isEquals(int[] arr1, int[] arr2) {
        boolean flag = true;
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                flag = false;
                break;
            }
        }
        return flag;
    }

    public static int[] copyArr(int[] arr) {
        int[] arr2 = new int[arr.length];
        int N = arr.length;
        for (int i = 0; i < N; i++) {
            arr2[i] = arr[i];
        }
        return arr2;
    }

    //生成一个长度随机,元素的值也随机的数组。
    public static int[] generateRandomArr(int maxSize, int maxValue) {
        //Math.random(): [0, 1)上的所有小数,等概率返回一个。
        //Math.random() * N:[0, N)上的所有小数,等概率返回一个。
        //(int) Math.random() * N:[0, N)上的所有整数,等概率返回一个。
        int[] arr = new int[(int) (Math.random() * maxSize)];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * maxValue) - (int) (Math.random() * maxValue);
        }
        return arr;
    }

    public static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    private static void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

}

 

posted @ 2022-10-29 13:23  TheFloorIsNotTooHot  阅读(24)  评论(0)    收藏  举报