排序(一)---直接插入排序

1.直接插入排序

1) 定义

直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m  1 的有序表。

2)  算法思路

设有一组关键字{ K 1  K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列;然后让 K 3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列;依次类推,最后让 K n 插入上述表长为 n-1 的有序序列,得一个表长为 n 的有序序列。

【例】设有一组关键字序列{ 55  22  44  11  33 },这里 n=5 ,即有 5 个记录。请将其按由小到大的顺序排序。排序过程如图9.1所示。

第一趟: [55]   22   44  11  33 

第二趟: [22     55]   44   11  33

第三趟: [22     44   55]   11  33

第四趟: [11     22     44    55] 33

结果:   [11     22      33   44   55 

     

3)具体算法

template

 void stinsort (T r[],int n)

  { int i,j;

    for (i=2;i<=n;i++)          //共进行n-1趟插入

      { r[0]=r[i];              //r[0]为监视哨,也可作下边循环结束标志

        j=i-1;

        while (r[j].key>r[0].key) { r[j+1]=r[j]; j--;}

        r[j+1]=r[0];        //r[0]即原r[i]记录内容,插到r[j]后一位置

      }

  }    //sinsort

4) 算法时间复杂度

此算法外循环 n-1 次,在一般情况下内循环平均比较次数的数量级为O(n) ,所以算法总时间复杂度为O(n2

5)直接插入排序的稳定性

直接插入排序是稳定的排序方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值