美文网首页
SelectionSort

SelectionSort

作者: 最爱水皮蛋 | 来源:发表于2016-12-05 15:06 被阅读0次

    思想:每轮遍历寻找最值(MAX,MIN),筛选出后,剩余元素重复进行
    第一轮遍历前


    SelectionSort1.png

    第一轮遍历中


    SelectionSort2.png
    第一轮遍历后
    SelectionSort3.png

    Java展现其思想

    package sortingAlgo;
    
    import java.util.Arrays;
    import java.util.Random;
    
    /**
     * @author 水皮蛋 
     *  特性:In-place sort,unstable sort。
     *  思想:每次遍历找一个最小值。 
     *  最好情况时间:O(n^2)。
     *  最坏情况时间:O(n^2)。
     */
    public class SelectionSort {
        
        public static void main(String[] args) {
            int[] arr = createRandomArray();
            System.out.println(Arrays.toString(arr));
            System.out.println(Arrays.toString(selectionSort(arr)));
        }
    
        /**
         * @param arr
         *            需要排序的数组
         * @return 升序数组
         */
        public static int[] selectionSort(int[] arr) {
            if (arr == null)
                throw new NullPointerException();
            int n = arr.length, min, i;
            // 替换值变量
            int temp;
            for (i = 0; i < n; i++) {
                min = getMinKey(arr, i);
                if (min != i) {
                    temp = arr[i];
                    arr[i] = arr[min];
                    arr[min] = temp;
                }
            }
            return arr;
        }
    
        /**
         * @param arr
         *            需要排序的数组
         * @return 数组元素最小的一个key
         */
        public static int getMinKey(int[] arr, int min) {
            // 防呆:防止对象为空,造成NPE
            if (arr == null)
                throw new NullPointerException();
            int n = arr.length;
            // 数组的长度如果小于2,排序没有意义
            if (!(n > 1))
                return 0;
            // 两两比较获取最小值得角标,即key
            for (int i = min + 1; i < n; i++) {
                if (arr[min] > arr[i])
                    min = i;
            }
            return min;
        }
    
        /**
         * 使用Random类产生随机数组的对象
         * @return 随机数组
         */
        public static int[] createRandomArray() {
            Random random = new Random();
            int[] array = new int[10];
            for (int i = 0; i < 10; i++) {
                array[i] = random.nextInt(100);
            }
            return array;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:SelectionSort

          本文链接:https://www.haomeiwen.com/subject/fmnkmttx.html