T01_选择排序算法



import java.util.Arrays;

import static cn.linglongfang.algorithm.sort.T00_Utils.*;

/**
 * 选择排序:
 *      遍历数组,选第i~n位置最小的数和第i个数交换
 *      基位置i不断变大,前面的第i个数都是排序好的。
 *
 *      时间复杂度: O(n^2)
 *      空间复杂度: O(1)
 *      常数时间:   O(n^2)比较,O(n)交换
 *
 * @author Linglong Fang
 */
public class T01_SelectionSort {

    public static void main(String[] args){

        final int NUM = 50_0000;
        final int maxSize = 100;
        final int maxValue = 100;
        boolean success = true;

        for (int i = 0; i < NUM; i++){
            int[] arr = generateRandomArray(maxSize, maxValue);
            int[] arr1 = copyArray(arr);
            int[] arr2 = copyArray(arr);
            selectionSort(arr1);
            Arrays.sort(arr2);
            if (!isEquals(arr1,arr2)){
                success = false;
                System.out.println("原始数组:"+Arrays.toString(arr));
                System.out.println("自定义排序:"+Arrays.toString(arr1));
                System.out.println("系统排序:"+Arrays.toString(arr2));
                break;
            }
        }

        if (success){
            System.out.println("很好,你的算法正确");
        }else{
            System.out.println("你可真是一个小垃圾");
        }

    }

    /**
     * 选择排序
     * @param array
     */
    public static void selectionSort(int[] array){
        /**
         * 0 ~ n-1 最小放在0上
         * 1 ~ n-1 最小放在1上
         * 2 ~ n-1 最小放在1上
         *  ··· ···
         * n-2 ~ n-1 最小放在1上
         */
        for (int i = 0; i < array.length-1; i++) {
            int minIndex = i;
            for (int j = i+1; j < array.length; j++){
                if (array[minIndex] > array[j]){
                    minIndex = j;
                }
            }
            sweep(array,i,minIndex);
        }
    }


}
posted @ 2020-11-30 21:24  linglongfang  阅读(97)  评论(0)    收藏  举报