【数据结构】直接插入排序(C语言版)


内容参考:《数据结构》(C语言版 _严蔚敏 吴伟民 )

一、插入排序

1、基本思想

每步将一个待排序的记录按其关键字大小插入前面已经排好序的一组记录的适当位置上,直到记录全部有序为止。
即所说的:边插入边排序,保证子序列中随时都是有序的。

2、插入排序的主要算法

1. 直接插入排序
2. 折半插入排序
3. 希尔排序

以下将要介绍的是直接插入排序

二、直接插入排序

直接插入排序(Straight Insertion Sort),是一种最简单的排序方法。

1、基本操作

将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

2、示例

例如,已知待排序的一组记录的初始排列如下所示:
49 , 38 , 65 , 97 , 76 , 13 , 27 , 49
( 从小到大排序)

在这里插入图片描述

如上图所示,得到一组新的有序序列
13 , 27 , 38 , 49 , 49 , 65 , 76 , 97

3、算法

void InsertSort( SqList &L){
  //对顺序表L作直接插入排序。
  for(i=2;i<=L.length;++i)
     if(LT(L.r[i].key,L.r[i-1].key)){   
                              //“<”,需将L.r[i]插入有序子表
       L.r[0]=L.r[i]//复制为哨兵
       L.r[i]=L.r[i+1]for(j=i-2; LT(L.r[0].key,L.r[j].key);  --j)
         L.r[j+1]=L.r[j];    //记录后移
       L.r[j+1]=L.r[0];      //插入到正确位置
     }
}  //InsertSort

4、特性

  • 时间复杂度:
    最好情况时间复杂度为O(n)
    最坏情况时间复杂度为O(n2)
    平均情况O(n2)

  • 空间复杂度: * O(1)*

  • 算法稳定性: 稳定


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值