希尔排序(分组插入法)

来源:互联网 发布:数据自动统计分析方法 编辑:程序博客网 时间:2024/04/30 12:26
#include <stdio.h>
#include <stdlib.h>
#include <string>


void SortGroup(int *pnData,int nLen,int nBegin,int nStep)
{
int i,j,k,nTemp;
for(i = nBegin+nStep;i<nLen;i+=nStep)
{
//寻找I的位置
for(j=nBegin;j<i;j+=nStep)
{
//如果比他小  则这里就是他的位置
if(pnData[i]<pnData[j])
{
nTemp = pnData[i];
for(k=i;k>j;k -= nStep)
{
pnData[k] = pnData[k-nStep];
}
pnData[j] = nTemp;
}
}
}
}


///希尔排序,pndata要排序的数据,nLen数据的个数
void ShellSort(int *pnData,int nLen)
{
int nStep,i;
//以nStep分组,nStep每次减为原来的一半;
for(nStep =nLen/2;nStep>0;nStep/=2)
{
//对每个分组进行排序
for(i=0;i<nStep;++i)
{
SortGroup(pnData,nLen,i,nStep);
}
}
}
int main()
{
int nData[8] = {49,38,65,97,76,13,27,49};
int i=0,len;
printf("排序前:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
ShellSort(nData,8);
printf("排序后:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
return 0;
}
0 0
原创粉丝点击