美文网首页
插入排序法

插入排序法

作者: Gavin黄炯鹏 | 来源:发表于2019-04-11 14:05 被阅读0次
  • 算法思路
    对于大小为n的数组a,分已排序区域A (a[0, m-1]) 和未排序区域B (a[m, n-1]),其中m为已排序区间元素个数。
    用j递增遍历A元素 (遍历范围[1, n-1]) ,每一次遍历用变量value记下a[j],然后使k=j,递减遍历a[k-1] (遍历范围(0, j]) 与value比较,若a[k-1] > value,a[k-1]向后移,否则跳出k循环,赋值a[k]=value (先跳循环再赋值)
  • 算法疑问
    • j, k的含义分别是什么?
      j指向的是B的首元素;跳出循环的k指向的是要插入的位置。
    • 为什么要跳出循环再赋值?
      假如k=0,回跳出循环,而0位置就是要插入的位置。跳出再赋值时为了兼容k=0的情况。
  • 算法分析
    • 是否是稳定排序算法
      是的。
    • 是否是原地排序算法?
      是的。
    • 空间复杂度
      因为时候原地排序算法,所以是O(1)。
    • 时间复杂度
      设m为插入次序,t(m)为第m次插入的消耗时间,则有
      T(n) = t(1) + ... + t(n-1)
      t(m)max = m
      t(m)min = C(常数)
      则T(n)max = 1 + ... + n - 1 = n(n-1)/2, 即O(n2)
      T(n)min = n-1(C), 即O(n)
      
  • 算法实现
    public void sort() {
      for (int j = 1; j < getSize(); j++) {
          int value = data[j];
          int k = j;
          for (; k > 0; k--) {
              if (data[k-1] > value) {
                  data[k] = data[k-1]; //已排序元素往后移,给需要插入的元素腾出位置
              }
              else {
                  break;
              }
          }
          data[k] = value;
      }
    }
    

相关文章

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • 3种排序

    冒泡排序 插入排序 快速排序法

  • 内排序1:插入排序

    插入排序有几种,这里讨论的是简单插入排序法,也称为直接插入排序法。 基本思想:第i趟排序是将第i+1个元素ki+1...

  • php实现几种常见的排序方法

    1. 冒泡排序法: 2. 选择排序法: 3.插入排序法: 4.快速排序法:

  • 五、希尔排序

    希尔排序法(缩小增量法) 属于插入排序,是将整个无序列分割成若干小的子序列分别进行【插入排序】的方法。 我们知道,...

  • js 常见排序算法(快速排序,选择排序等)

    快速排序法 选择排序 插入排序 冒泡排序

  • 排序算法

    冒泡排序 堆排序 插入排序 二分法查找插入排序 希尔排序 快速排序 归并排序

  • iOS算法

    排序方法 选择排序:直接选择排序、堆排序。 交换排序:冒泡排序、快速排序。 插入排序:直接插入排序、二分法插入排序...

  • 常用的排序算法

    1. 冒泡排序: 2.快速排序法 3.插入排序法 4.选择排序法 5.归并排序法

  • 常见排序算法及对应的时间复杂度和空间复杂度

    [TOC]1、插入排序1.1直接插入排序(从后向前找到合适位置后插入)1.2 二分法插入排序1.3 希尔排序2、选...

网友评论

      本文标题:插入排序法

      本文链接:https://www.haomeiwen.com/subject/zsetwqtx.html