美文网首页
算法复习-插入类排序(1)-直接插入排序

算法复习-插入类排序(1)-直接插入排序

作者: 桔子满地 | 来源:发表于2018-06-19 15:43 被阅读0次

直接插入排序(InsertSort)

每次插入一个新的待排序数到已排序序列中,注意此时从后往前比较,更节省时间。

举例

原始序列: 49, 38, 65, 13, 27

  1. 一开始只看49,则单个数字肯定是有序的

{49} / 38, 65, 13, 27

  1. 此时插入38, 由于38<45, 故45向后移动, 38插入到49原来的位置

{38, 49} / 65, 13, 27

  1. 此时插入65, 从后向前进行比较,49<65, 故65直接插入到49之后

{38, 49, 65} / 13, 27

  1. 此时插入13,从后向前进行比较,一直到38>13,这趟排序后的结果为:

{13, 38, 49, 65} / 27

  1. 此时插入27,从后向前进行比较,发现该插入到13之后,38之前

{13, 27, 38, 49, 65}

代码:

#include <iostream>
using namespace std;

void InsertSort(int array[], int n) {
  int i, j, temp;
  for (i = 1; i < n; ++i) {
    temp = array[i];
    j = i - 1;
    while (j >= 0 && temp < array[j]) {
      array[j+1] = array[j];
      --j;
    }
    array[j+1] = temp;
  }
}

void print_array(int array[], int n) {
  for (int i = 0; i < n; ++i)
    cout<<array[i]<<" ";
  cout<<endl;
}

int main() {
  int array[] = {49, 38, 65, 13, 27};
  print_array(array, 5);
  InsertSort(array, 5);
  print_array(array, 5);

  return 0;
}

复杂度分析

1. 时间复杂度
最坏情况,整个原始序列是逆序的,则内层循环temp<array[i]每次都成立,则时间复杂度为O(n^2).
最好情况,整个原始序列原本就是按序排列的,则内存循环条件不满足,时间复杂度为O(n).
综合来看,时间复杂度为O(N^2).

2. 空间复杂度
只需要一个temp,并不随着待排序列的规模而变化,因此空间复杂度为O(1).

相关文章

  • 排序算法时间复杂度、空间复杂度、稳定性比较

    一、排序算法的分类 1.插入类排序直接插入排序,折半插入排序,希尔排序2.交换类排序冒泡排序,快速排序3.选择类排...

  • 排序——插入排序

    业精于勤荒于嬉 插入排序包括:直接插入排序、折半插入排序、希尔排序(缩小增量排序) 一、直接插入排序 1. 算法思...

  • 排序

    本文记录几个基础的排序算法。排序算法分为插入排序、交换排序、选择排序等几大类。 插入排序 1. 直接插入排序 O(...

  • 排序算法(一)直接插入排序算法

    排序算法(一)直接插入排序算法 1.基本概念  直接插入排序(Straight-Insertion-Sort)是一...

  • Java学习记录(常用 算法 排序 )

    排序算法的分类如下: 1.插入排序(直接插入排序、折半插入排序、希尔排序);2.交换排序(冒泡泡排序、快速排序);...

  • 九种排序算法(重要!!)

    分类:(九种排序算法) 1、插入排序:直接插入排序、二分插入排序、希尔排序; 2、选择排序:简单选择排序、堆排序 ...

  • 排序算法时间复杂度对比

    内排序主要分为四类:插入排序类、选择排序类、交换排序类、归并排序类。 插入排序类 直接插入排序 希尔排序 选择排序...

  • 算法-插入排序

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

  • 数据结构05-排序和查找

    1:排序算法分为如下5类: 插入排序:普通插入排序,shell排序等; 选择排序:普通选择排序,堆排序; 交换排序...

  • [数据结构与算法-iOS 实现]插入排序几种算法实现比较附dem

    插入排序 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 [1] 。插入排序是一种最...

网友评论

      本文标题:算法复习-插入类排序(1)-直接插入排序

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