希尔排序

插入排序的改进。递减增量排序算法。

步长为1时就是插入排序。

#include<stdio.h>

void ShellSort(int a[],int n)

{

 int i,j,k,temp,gap;

 int gaps[]={1,5,13,43,113,297,815,1989,4711,11969,27901,84801,213331};

 for(k=0;gap[k]<n;k++)

 while(--k>=0)

 {

  gap = gaps[k];

  for(i=gap;i<n;i++)

  {

   j=i-gap;

   temp=a[i];

   while((j>=0)&&(a[j]>temp))

   {

    a[j+gap] = a[j];

    j=j-gap;

   }

   a[j+gap] = temp;

  }

 }

}

或者:

void shellSort(int* data,size_t size)

{

 for(int gap = size/2;gap>0;gap/=2)

  for(int i=gap;i<size;++i)

  {

   int key = data[i];

   int j=0;

   for(j=i-gap;j>=0&&data[j]>key;j-=gap)

   {

    data[j+gap] = data[j];

   }

   data[j+gap] = key;

  }

}

 

posted @ 2015-09-26 22:47  Uncle_Nucky  阅读(116)  评论(0编辑  收藏  举报