• 选择排序


    选择排序

    与冒泡类似,时间复杂度也是相同,但其中关键点在于记住索引。

    • 场景0:现有数组([2,5,3,1,4]),求这个数组的从小到大排序后数组表现。
    • 解决思路:依次确保第n个位置所在元素是前n个元素中最大的即可。
      • 2 < 5, 最大值为5,索引值为1。
      • 5 > 3, 5 > 1, 5 > 4。最大值还是5,索引值为1
      • 更换5 与 4的位置,此时数组为([2,4,3,1,5])
      • 继续比较,依次类推

    目的是记住索引,记住最大或者最小值的索引,交换位置后。下一轮比较将直接跳过上一轮所更换的最大或者最小值位置。

    Demo

    package Sort;
    
    import java.util.Arrays;
    
    /**
     * 实现选择排序
     *
     * @author Ldity
     * @date: 2020/8/10 21点08分
     */
    public class SelectSort {
        public static int[] arr = {123,34,132,21,23,1324,52,2123,23415,-1};
    
        /**
         * 获取两个值中的最小值的索引值
         *
         * @param arr - 待输入的数组
         * @param i 一个数的索引值i
         * @param j 一个属的索引值j
         * @return 返回最小值的索引
         */
        public static int minIndex(int[] arr, int i, int j){
            if( arr[i] < arr[j]){
                return i;
            }else return j;
        }
    
        /**
         * 交换数组中的两个值
         *
         * @param arr - 目的数组
         * @param i 其中一个数的索引值i
         * @param j 其中一个数的索引值j
         */
        public static void exchange(int[] arr, int i, int j){
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    
        /**
         * 实现选择排序
         *
         * @param arr - 待排序的数组
         */
        public static void selectSort(int[] arr){
            int n = arr.length;
            // 遍历i个元素
            for(int i = 0; i < n; i++){
                int min = i;
                //记录一次过程的最小值,然后返回
                for(int j = i + 1; j < n; j++){
                    min = minIndex(arr, min, j);
                }
                exchange(arr, i, min);
            }
        }
        public static void main(String[] args){
            selectSort(arr);
            System.out.println(Arrays.toString(arr));
        }
    }
    
    
  • 相关阅读:
    CSS自学笔记(9):CSS拓展(二)
    CSS自学笔记(8):CSS拓展(一)
    给大家介绍几个常见的Android代码片段
    分享一个完美的新闻客户端(酷商城)Android源码
    Android dex ,xml 文件反编译方法
    Android宝宝点点乐游戏源码完整版
    Excel基础视频教程在线观看
    计算机二级考试Access教程
    程序员面试题目汇总讲解
    JAVA在线观看视频教程完整版
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13785077.html
Copyright © 2020-2023  润新知