一、算法描述
- 希尔排序是直接插入排序的升级版,相隔相同步长的进行插入排序,每次循环中步长减半,直到步长为1
二、希尔排序代码
void shell(int *p,int n)
{
int step,temp=0,i,j;
for(step=n/2;step>0;step/=2)
{
for(i=step;i<n;i++)
{
temp = p[i];
for(j=i-step;j>=0&&p[j]>temp;j-=step)
{
p[j+step] = p[j];
}
p[j+step] = temp;
}
}
}
三、检测代码
#include<stdio.h>
void shell(int *p,int n)
{
int step,temp=0,i,j;
for(step=n/2;step>0;step/=2)
{
for(i=step;i<n;i++)
{
temp = p[i];
for(j=i-step;j>=0&&p[j]>temp;j-=step)
{
p[j+step] = p[j];
}
p[j+step] = temp;
}
}
}
int main()
{
int n,i;
printf("请输入需要排序的数的个数:\n");
scanf("%d",&n);
int a[n];
printf("请输入需要排序的数:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
shell(a,n);
printf("希尔排序的结果:\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}