Shell排序算法基本思想:
将n个元素的数组分成n/2个数字序列,一次循环使得每个序列排好顺序,然后再变为n/4个序列,再次排序...随着序列减少,最后变成一个,就完成了排序。(排序效率高)
#include <stdio.h>
#include <time.h>
static void ShellSort(int *shuzu,int shuzuLen);
void main()
{
system("clear");
int i=0;
int shuzu[11];
srand((unsigned int)time(NULL));
for(i=0;i<=10;i++)
{
shuzu[i]=rand()%100;
}
printf("Original is \n");
for(i=0;i<=10;i++)
{
printf("%d ",shuzu[i]);
}
printf("\n\n\n");
ShellSort(shuzu,11);
}
static void ShellSort(int *shuzu,int shuzuLen)
{
int i=0,j=0,r=0,temp=0,k=0;
for(r=shuzuLen/2;r>0;r/=2)
{
for(i=r;i<=10;i++)
{
temp=shuzu[i];
j=i-r;
while(j>=0 && temp<shuzu[j])
{
shuzu[j+r]=shuzu[j];
j-=r;
}
shuzu[j+r]=temp;
for(k=0;k<=10;k++)
{
printf("%d ",*(shuzu+k));
}
printf("\n");
}
printf("the %d round end\n",i);
}
printf("\nafter ShellSort \n");
for(i=0;i<=10;i++)
{
printf("%d ",*(shuzu+i));
}
printf("\n");
}