#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 100
int readSeq(int a[]); // 读入一个整数序列,返回读入的整数的个数
void showSeq(int a[], int n);
void shellSort(int a[], int n);
int main()
{
int n, nums[MAXLEN];
while ((n = readSeq(nums)) > 0) // 如果输入的序列长度大于零就执行排序,否则退出
{
showSeq(nums, n);
shellSort(nums, n);
showSeq(nums, n);
}
return 0;
}
void shellSort(int a[], int n) // 希尔排序其实是分组的插入排序
{
int i, j, increment;
int key;
for (increment = n / 2; increment > 0; increment /= 2) // 缩减增量排序
{
for (j = increment; j < n; j++) // 内部类似插入排序
{
key = a[j];
i = j - increment;
while (i >= 0 && key < a[i])
{
a[i+increment] = a[i];
i -= increment;
}
a[i+increment] = key;
}
}
}
int readSeq(int a[])
{
int n, i = 0;
scanf("%d", &n);
while (i < n)
scanf("%d", &a[i++]);
return i;
}
void showSeq(int a[], int n)
{
int i = 0;
while (i < n)
printf("%d ", a[i++]);
putchar('\n');
}
算法基础5:希尔排序(缩减增量排序算法)
最新推荐文章于 2021-08-02 11:35:54 发布