首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有人能给小弟我一段希尔排序的代码吗

2012-04-01 
有人能给我一段希尔排序的代码吗?最近在看数据结构,看到希尔排序有点头痛,现在基本看通了,就想看下各位是

有人能给我一段希尔排序的代码吗?
最近在看数据结构,看到希尔排序有点头痛,现在基本看通了,就想看下各位是怎么利用希尔排序的,能对它有更深一步的理解与印象
   
  谢谢!

[解决办法]
这是我在实际中使用的一段代码,用的就是希尔排序:

C/C++ code
void CShxBigfont::SortIndex(void){    //对索引区进行排序,排序之后可以使用二分法进行快速检索    bool bFinish;                    //结束标志    int iSpace = ShapeCount;        //起始跨度    CBigfontIndex siTemp;            //临时索引项,用于交换    while(iSpace)    {        bFinish = false;            //结束标志初始化        iSpace /= 2;                //跨度减半        while(!bFinish)        {            bFinish = true;            //假定即将结束            for(int i=0;i<ShapeCount-iSpace;i++)            {                if(ShapeIndex[i]>ShapeIndex[i+iSpace])                {                    //需要交换                    siTemp               = ShapeIndex[i];                    ShapeIndex[i]        = ShapeIndex[i+iSpace];                    ShapeIndex[i+iSpace] = siTemp;                    bFinish = false;    //设定结束标志                }            }        }    }}
[解决办法]
我的代码:
C/C++ code
template<typename T>void ShellSort(T data[],int arrSize)//希尔排序{    T tmp;    int i,j,hCnt,h,k;    const int num(8);    int increments[num];//间隔数    for(h=1,i=0;h<arrSize&&i<num;++i)    {        increments[i]=h;        h=3*h+1;    }    for(--i;i>=0;--i)    {        h=increments[i];        for(hCnt=h;hCnt<2*h;++hCnt)        {            for(j=hCnt;j<arrSize;)            {                tmp=data[j];                k=j;                while(k-h>=0&&tmp<data[k-h])                {                    data[k]=data[k-h];                    k-=h;                }                data[k]=tmp;                j+=h;            }        }    }} 

热点排行