#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;
}