选择排序详解

选择排序详解

思路分析

  1. 选择排序,即选择数组中最小或者最大的数(取决于你要顺序排列还是降序排列)和数组中最前边的元素交换位置
  2. 第一次循环将最小的元素放置到数组的最前边,及最小元素和第一个元素交换位置,第二次循环将倒数第二小的元素放置到数组第二个位置,及倒数第二小元素和第二个元素交换位置,以此类推
  3. 则在进行 len - 1 次循环后,所有的元素都排好序
  4. 外层循环每次将最小的元素向前移动,内层循环则寻找最小的数,并完成交换,从当前已经排好序的有一个元素开始执行
  5. 选择排序的时间复杂度为 n ^ 2,但是每次循环执行的语句较少,执行效率比冒泡快很多
  6. 源码及解析如下

源码及分析

/**
     * 选择排序
     * @param arr 要排序的数字
     *
     *   每次将数组中最小的元素拿出来放到最前边
     *
     */
    public static void selectSort(int[] arr){
        //外层循环 len - 1 次,每次将最小的元素移动到最前
        for (int i = 0; i < arr.length - 1; i++) {
            //定义变量min保存当前次循环的最小值,
            int min = arr[i];
            //定义minIndex保存当前次循环最小值对应的索引
            int minIndex = i;
            //内层循环遍历当前元素右侧的数据,找到最小值
            for (int j = i + 1; j < arr.length ; j++) {
                if (min > arr[j]){
                    //如果当前数小于min,则记录值并记录其索引
                    min = arr[j];
                    minIndex = j;
                }
            }
            //交换位置,即将最小的数移动的前边
            if (minIndex != i) {
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
    }
posted @ 2021-05-30 22:22  mx_info  阅读(170)  评论(0)    收藏  举报