希尔排序 不稳定 增量集 最后一个增量为1
#include <stdio.h>
#define N 15
int a[N] = { 50, 26, 38, 80, 70, 90, 8, 30, 40, 20 };
//int a[N] = { 15, 9, 7, 8, 20, -1, 4 };
void shellsort(int n, int d)
{
int i, j, k;
for (i = 0; i < d; i++) // 如 d=5 , i =0 1 2 3 4
{
int tmpi = i;
for (j = tmpi + d; j < n; j += d)
{
int data = a[j]; // 保存当前要插入的元素
// 插入排序 需要移动元素
for (k = tmpi; k < j; k += d)
{
if (a[k] > data)
{
break;
}
}
// k 为 大于 data的位置
for (int t = j; t > k; t -= d)
{
a[t] = a[t - d];
}
a[k] = data;
}
}
}
void pf(int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void test()
{
int n = 10;
printf("增量d = {5,3,1}\n");
printf("原始序列:");
pf(n);
shellsort(n, 5);
printf("第一趟:");
pf(n);
shellsort(n, 3);
printf("第二趟:");
pf(n);
shellsort(n, 1);
printf("第三趟:");
pf(n);
}
int main()
{
test();
return 0;
}