zoukankan      html  css  js  c++  java
  • 选择排序

    1. 选择排序

    1.1 排序原理

    • 将数组分为两个区间,一个有序区间,一个无序区间。开始默认数组为无序区间;
    • 从无序区间取最小的一个元素,将最小的元素与无序区间的第一个元素交换位置,即插入有序区间的末尾;
    • 重复这个过程,直到无序区间没有元素;

    1.2 性能分析

    1.2.1 执行效率

    • 最小时间复杂度:数据完全有序时,只需进行一次遍历操作即可,时间复杂度是O(n^2);
    • 最大时间复杂度:数据倒序排序时,需要n次插入操作,时间复杂度是O(n^2);
    • 平均情况复杂度:时间复杂度是O(n^2);

    1.2.2  空间复杂度

      每次交换仅需1个临时变量,故空间复杂度为O(1),是原地排序算法。

    1.2.3 算法稳定性 

      假设数组为 5 8 5 2,第一选择最小元素时前面的5被换到后面了,所以不是稳定排序。

    1.3 代码实现

    public static int[] selectSort(int[] a){
            if (a.length <= 1)
            {
                return a;
            }
            // 默认初始数组为无序区间,从第一个元素开始排序
            for (int i = 0; i < a.length; i++)
            {
                // 开始默认无序区间第一个元素最小
                // temp为最小的元素
                int temp = a[i];
                // 最小元素的下标
                int min = i;
                // 从无序区间的第二个元素开始进行比较
                for (int j = i+1; j < a.length; j++)
                {
                    // 有元素比最小元素还小,将那个元素赋给最小元素,并记录它的下标
                    if (temp > a[j])
                    {
                        temp = a[j];
                        min = j;
                    }
                }
                // 将最小元素与无序区间的第一个元素进行交换
                a[min] = a[i];
                a[i] = temp;
                System.out.println(i+" :"+Arrays.toString(a));
            }
            
            return a;
        }
  • 相关阅读:
    Vue+ElementUI 安装与应用
    python 之serial、pyusb 使用开发
    ASP.NET Swagger 创建与汉化生成 API说明文档
    DataGridView绑定数据源后动态删除行
    MySql动态拼接SQL并动态赋值
    MySql存储过程
    DEV控件之TreeList使用
    DataGridView单元格格式化
    ajax通过PUT方式调用WEBAPI
    解决跨域session 同步问题
  • 原文地址:https://www.cnblogs.com/virgosnail/p/10486574.html
Copyright © 2011-2022 走看看