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

    直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

    核心代码(C实现)

    void InsertSort(int arr[], int len)
    {
        //无序数组的下标
        int i;
        //有序数组的下标
        int j;
        //保存无序数组第一个元素的值
        int temp;
    
        //检测参数
        assert(arr!=NULL && len<=0);
        
        for(i=0; i<len; ++i)
        {
            temp = arr[i];
            j = i-1;
            while(temp<arr[j] && j>=0)
            {
                //把大的元素放到后面
                arr[j+1] = arr[j];
                --j;
            }
    
            //把无序数组的第一个值放到正确的位置
            arr[j+1] = temp;
        }
    }

    核心代码(C++实现)

    template <typename T>
    void insertSort(T array[], int length)
    {
        if ((NULL == array) || (length < 2)) {
            return;
        }
    
        for (int disorder_index = 0; disorder_index < length; ++disorder_index) // 遍历无序数据
        {
            int disorder_value = array[disorder_index]; // 保存无序数据的第一个值
            int order_index = disorder_index-1; // 记录有序数据的下标
            while ((order_index >= 0) && (disorder_value < array[order_index])) // 根据(order_index>=0)判断无序数据中的第一个值是否和所有的有序数据比较完成     
            {
                array[order_index+1] = array[order_index]; // (从小到大)当无序的值 < 有序的值,就将有序数据向后移动一个位置
                --order_index;
            }
            array[order_index+1] = disorder_value; // 将无序的值 插入 正确的位置
        }
    }

    算法分析:

      最好时间复杂度:O(n)

      平均时间复杂度:O(n^2)

      最坏时间复杂度:O(n^2)

        空间复杂度:O(1)

          稳定性:稳定

    直接插入排序在性能上要比简单选择排序和冒泡排序好一些。

    直接插入排序在记录比较少和记录本身是基本有序时,效率是比较高的。由于这两个条件,后面就产生了希尔排序。

  • 相关阅读:
    MySql的基本架构续
    MySql的基本架构演变
    多列索引
    索引对单个表查询的影响
    技术在短期内总会被高估,但长期内,总会被低估
    MySql初步II
    验证启用了不安全的HTTP方法
    Struts2漏洞利用实例
    sar命令的使用
    HttpWatch的时间分析
  • 原文地址:https://www.cnblogs.com/chen-cai/p/7679592.html
Copyright © 2011-2022 走看看