有人能给我一段希尔排序的代码吗?
最近在看数据结构,看到希尔排序有点头痛,现在基本看通了,就想看下各位是怎么利用希尔排序的,能对它有更深一步的理解与印象
谢谢!
[解决办法]
这是我在实际中使用的一段代码,用的就是希尔排序:
- 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; } } }}