#include <stdio.h>
#define N 10
void Shell_Sort(int *a, int n);
int main(int argc, char** argv)
{
int i;
int a[N];
printf("请为需排序数组输入数据:\n");
for(i=0; i<N; i++)
{
scanf("%d",&a[i]);
}
Shell_Sort(a,N);
for(i=0; i<N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
/*
Shell_Sort:希尔排序
@a:数组名
@n:数组元素个数
返回值类型: void
*/
void Shell_Sort(int *a, int n)
{
int i, j;
int d = n/2;
int temp;
while(d>=1)
{
//遍历值(n-d-1)处
for(i=0; i<n-d; i++)
{
//对比组内元素
if(a[i]>a[i+d])
{
temp = a[i+d];
a[i+d] = a[i];
a[i] = temp;
//如果该元素并非该组第一个元素,则返回至该组上一个元素
if(i>=d)
{
i -= d+1;
}
}
}
d = d/2;
}
return;
}

高亮部分为排序过程