帮忙解释程序C

来源:百度知道 编辑:UC知道 时间:2024/05/17 13:36:00
#include <stdio.h>
#define SIZE 10
void main()
{
void shell();
int d[SIZE],i;
printf("input num");
for(i=0;i<SIZE;i++)
scanf("%d",&d[i]);
shell(d,SIZE);
printf("after sort:\n");
for(i=0;i<SIZE;i++)
printf("%5d",d[i]);
}

void shell(v,n)
int v[],n;
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2)
for(i=gap;i<n;i++)
for(j=i-gap;j>=0 && v[j]>v[j+gap];j-=gap)
{
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}

这是希尔排序其实是属于数据结构的知识然后用C语言来编写代码

希尔排序又称“缩小增量排序”,它是一种插入排序方法。

先将整个待排序记录序列分割成若干子序列分别进行直接

插入排序,待整个序列中的记录“基本有序时”,再对全体记录

进行一次直接插入排序。

比如说开始有十个数据:49 38 65 97 76 13 27 48 55 4

第一次比较:gap=n/2= 5(n=size=10)
第一次分组后有:49 和 13 是一组 38和27 是一组 依次类推
所以第一次比较后有:13 27 48 55 4 49 38 65 97 76

第二次:gap=3
第二次分组后有: 13 和55一组 27和4一组 依次类推
所以第二次排序后有:13 4 48 38 27 49 55 65 97 76

…………
知道最后排序完成

每次都是组内两个元素比较
然后一个循环之后分一次组

大概就是这个样子了

是排序算法吧。