希尔排序法

希尔排序法的示意图

 

#include<stdio.h>
void Shell_Sort(int ar[],int len);
int main(void)
{
int i,n;
puts("Input the number of elements to the array:");
scanf("%d",&n);
int ar[n]; //变长数组,n要在声明之前得到
printf("Input %d elements of the array:\n",n);
for(i=0;i<n;i++) //读取数组元素
scanf("%d",&ar[i]);
Shell_Sort(ar,n); //调用希尔排序函数进行排序
printf("\n\nRuslt: ar[%d]= ",n);//逐个打印数组元素
for(i=0;i<n;i++)
printf("%3d ",ar[i]);
putchar('\n');
return 0;
}
void Shell_Sort(int ar[],int len)
{
int gap,i,j,temp,ct=0; //ct用来标记分步次数
gap=len/2; //现将总元素分为两部分,得到部分间距gap
while(gap>0)
{
for(i=gap;i<len;i++) //按照间距gap对各部分元素进行比较
{
for(j=i-gap;j>=0;j -=gap)
{
if(ar[j]>ar[j+gap])
{
temp=ar[j];
ar[j]=ar[j+gap];
ar[j+gap]=temp;
}
}
}

printf("%d : gap=%d ar[10]= ",++ct,gap);//打印每步排序结果
for(i=0;i<len;i++)
printf("%3d",ar[i]);
putchar('\n');
gap/=2; //间距减半
}
}

posted @ 2021-09-15 19:39  Night_Voyager-qaq  阅读(50)  评论(0)    收藏  举报
Live2D