天天看點

希爾排序(分組插入法)

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

}

繼續閱讀