zoukankan      html  css  js  c++  java
  • 插入排序

    1. 插入排序

    1.1 排序原理

    • 将数组分为两个区间,一个有序区间,一个无序区间。开始默认第一个元素为有序区间;
    • 从无序区间取一个元素,在有序区间找到合适的位置将其插入;
    • 重复这个过程,直到无序区间没有元素;

    1.2 性能分析

    1.2.1 执行效率

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

    1.2.2  空间复杂度

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

    1.2.3 算法稳定性

      如果两个值相等,就不会交换位置,故是稳定排序算法。

    1.3 代码实现

    public static int[] insertSort(int[] a){
            if (a.length <= 1)
            {
                return a;
            }
            // 默认第一个元素为有序区间,所以从第二个元素开始排序
            for (int i = 1; i < a.length; i++)
            {
                int temp = a[i];
                int j = i-1;
               /* 插入元素时,从后面的元素开始比较。
                * 当 插入的元素 < 当前元素 时,将当前元素后移一位;
                * 继续比较 插入的元素 和 前面的元素;
                * 当插入元素 与 当前元素 不满足关系时,上一次比较肯定满足比较关系,且将当前元素已经复制到下一个位置;
                * 此时将插入元素直接插入此位置即可
                */ 
                for (;j >= 0;j--)
                {
                    if (temp < a[j])
                    {
                        a[j+1] = a[j];
                    } else {
                        break;
                    }
                }
                // 插入元素
                a[j+1] = temp;
            }
            
            return a;
        }
  • 相关阅读:
    Linux 中 /proc/meminfo 的含义
    Linux OOM-killer(内存不足时kill高内存进程的策略)
    java反射
    IDEA 创建Web项目
    centos7 源码安装php7
    linux 基本原则和常用命令
    ls file less
    centos7安装nginx1.10.1
    mysqlworkbench访问远程服务器
    redis 简单的注册
  • 原文地址:https://www.cnblogs.com/virgosnail/p/10486563.html
Copyright © 2011-2022 走看看