【代码】
#include <stdio.h>
#include <stdlib.h>
#include "time.h"
#define N 20
void Init(int *arr);
void Output(int *arr);
int Compare(int x, int y);
void ShellSort(int * arr);
void ShellInsert(int * arr, int dk);
int main()
{
int arr[N+1];
Init(arr);
Output(arr);
ShellSort(arr);
Output(arr);
return 0;
}
//初始化
void Init(int *arr)
{
int i;
srand( (unsigned)time( NULL ) );
for(i = 1; i <= N; i++)
arr[i] = rand()%100;
}
//输出
void Output(int *arr)
{
int i;
for(i = 1; i <= N; i++)
printf("%2d ", arr[i]);
printf("\n");
}
//比较函数
int Compare(int x, int y)
{
return x < y;
}
//希尔排序
void ShellSort(int * arr)
{
int i, dlta[] = {10, 5, 3, 1};
for(i = 0; i < 4; i++)
ShellInsert(arr, dlta[i]);
}
void ShellInsert(int * arr, int dk)
{
int i, j;
for(i = dk+1; i <= N; i ++)
{
arr[0] = arr[i];
for(j = i-dk; Compare(arr[0], arr[j]); j -= dk)
arr[j+dk] = arr[j];
arr[j+dk] = arr[0];
}
}
【运行截图】