九大排序——希尔排序代码实现
#include <stdio.h>
#include <stdlib.h>
/**
* @description:一次增量为h的排序
* @param
* arr:进行增量h的原始序列,数组名
* n:原始序列的元素个数
* h:增量(步长)
* @return void
*/
void h_sorting(int a[], int n, int h)
{
int i, j;
int x;
for (i = h; i < n; i++)
{
x = a[i];
for (j = i - h; j >= 0 && a[j] > x; j = j - h)
{
a[j + h] = a[j];
}
a[j + h] = x;
}
}
//对数组arr进行一个希尔排序
void shell_sort(int a[], int n)
{
int i;
//增量序列
int h[4] = {8, 4, 2, 1};
for (i = 0; i < 4; i++)
{
h_sorting(a, n, h[i]);
}
}
#define N 10
int main(void)
{
int i;
int a[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]);
}
return 0;
}