数据结构和算法学习系列之插入排序及希尔排序

参考书目:数据结构与算法分析C++描述(第3版) Mark Allen Weiss
由于希尔排序shell排序和插入排序的联系,故将二者放到一篇文章之中
插入排序

typedef int ElementsType; 
//插入排序,升序排序
void InsertionSort(ElementsType A[], int N) 
{ 
  ElementsType Temp; 
  int i, j; 
  //进行N-1趟遍历 
  for( i = 1; i < N; ++i ) 
  { 
    Tmp = A[i]; 
    //寻找插入点,数据依次向后移动
    for( j = i; j > 0 && A[j-1] > Temp; --j) 
      A[j] = A[j-1]; 
    A[j] = Temp; 
  } 

希尔排序shell排序
增量序列采用shell建议的序列:ht=[N/2]和hk=[h(k+1)/2] 每次遍历就是增量为Increment的插入排序。Increment表示shell排序增量序列的取值,初始值为N/2,每次遍历减为上一次的一半直到1

typedef int ElementType; 

void ShellSort(ElementsType A[], int N) 
{ 
  ElementsType Temp; 
  int i, j; 
  int Increment; 

  for( Increment = N/2; Increment > 0; Increment/=2 ) 
  { 
    for( i = Increment; i < N; ++i ) 
    { 
      Temp = A[i]; 
      for( j = i; j >= Increment && A[j-Increment] > Temp; j -= Increment) 
        A[j] = A[j-Increment]; 
      A[j] = Temp; 
    }   
  } 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值