插入排序的复习

比较常用的排序有插入排序、交换排序、选择排序、归并排序、分配排序等。

其中插入排序类的主要有:直接插入排序、折半插入排序、希尔排序

直接插入排序:

void InsertSort( SqList&L) 
{
for ( i=2; i<=L.length; ++i)
if ( L.r[i-1].key > L.r[i].key ) {
    L.r[0] = L.r[i]; 
    L.r[i]=L.r[i-1];
    for ( j=i-2; L.r[0].key < L.r[j].key; --j )
        L.r[j+1] = L.r[j]; 
    L.r[j+1] = L.r[0];  
  }
}

折半插入排序:

void BInsertSort(SqList &L)
{
    for(int i=2;i<=L.length;++i){
       L.r[0]=L.r[i];
       low = 1; high = i-1;
       while(low<=high){
         m = (low+high)/2;
         if(LT(L.r[0].key,L.r[m].key))  high = m + 1;
         else low = m + 1;
       }
       for(j = i-1; j>=high+1; --j)
       L.r[j+1] = L.r[j];
       L.r[high + 1] = L.r[0];
    }
}

希尔排序:

void ShellInsert (SqList &L, int dk) 
{
  for ( i=dk+1; i<=L.length; ++i )
    if ( L.r[i].key < L.r[i-dk].key ) {  
      L.r[0] = L.r[i]; 
    for ( j=i-dk; j>0 && L.r[0].key < L.r[j].key; j=j-dk )
      L.r[j+dk] = L.r[j]; 
    L.r[j+dk] = L.r[0]; 
  }
}

void ShellSort(SqList&L, intdlta[], intt)
{
    for (k=0; k<t; ++k)
      ShellInsert(L, dlta[k]); 
}//调用希尔排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值