• 1. 选择排序算法思想及实现


    思想

    每次选择未排序元素中的最小值,将其放在最左边。

    想象你打牌的时候,如果你手上有一堆牌,你每次找到最小的牌,然后将其出出来。手上的是未排序的牌,出出去的牌按顺序摆出来,就是已排序的。

    比较耗时:第一次比较n,第二次比较n-1,以此类推

    插入耗时:插入策略分为,移动选定元素前的元素,然后插入最小值;或者不断交换相邻元素,直到最小值到达所在位置;或者找到最小元素后,直接与需要排序的位置进行交换

    前一个方案,只要复制一条语句即可,然后进行一次交换。第二种交换,每一次交换,需要三条语句。第三种,只需要一次交换。

    实现

    import java.util.Arrays;
    
    public class SelectionSort {
        public static void main(String[] args) {
            int[] nums = {5, 7, 3, 2, 9, 4, 2, 6, 8};
            selectSort(nums);
            System.out.println(Arrays.toString(nums));
        }
    
        public static void selectSort(int[] nums){
            //记录排序部分的最后索引值
            for (int i = 0; i < nums.length; i++) {
                // 记录未排序部分的开始值
                int min_value = nums[i];
                int min_index = i;
                for (int j = i; j < nums.length; j++) {
                    // 找到未排序数组中的最小值及位置
                    if(nums[j]<min_value){
                        min_value = nums[j];
                        min_index = j;
                    }
                }
                // 找到了未排序数组中的最小值,然后跟要排序位置交换位置
                nums[min_index] = nums[i];
                nums[i] = min_value;
            }
        }
    }
    
    

    复杂度分析

    从上面分析上,可以看到,时间消耗主要是在找到最小值上。

    n+n-1+n-2+...

    所以时间复杂度为O(n^2)

  • 相关阅读:
    45.如何优雅的删除一张大表?
    13.安装上传和下载文件
    12.yum install 和yum localinstall区别
    7.Mysql之MGR环境搭建
    mod运算
    取整
    同余式
    Windows下的重定向
    C语言求正负余数
    复利计算公式
  • 原文地址:https://www.cnblogs.com/zhouzhiyao/p/12527049.html
Copyright © 2020-2023  润新知