#include<stdio.h>
#include<time.h>
/*
和插入排序类似
思想是先设一个跳数(通常为: step / 3 + 1),把一组数据分成多组,对多组分别进行插入排序
然后缩小跳数,再次重复上述步骤
直至跳数为1,也就是对所有数据进行一次插入排序(因为经过前面的操作,全体数据已变的基本有序),从而缩短时间
*/
#define MAX 10
void Shell_sort(int a[], int length)
{
int step = length;
do
{
step = step / 3 + 1;
int i, j;
for (i = 0; i < step; i++)
{
for (j = i + step; j < length; j += step)
{
if (a[j] < a[j-step])
{
int k;
int temp = a[j];
for (k = j-step; k >= 0 && temp < a[k]; k-=step)
{
a[k+step] = a[k];
}
a[k+step] = temp;
}
}
}
} while (step > 1);
}
void Show(int a[])
{
for (int i = 0; i < MAX; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int a[MAX];
srand((unsigned int)time(NULL));
for (int i = 0; i < MAX; i++)
{
a[i] = rand() % MAX;
}
Show(a);
Shell_sort(a, MAX);
Show(a);
return 0;
}
数据结构-排序算法之希尔排序(C语言实现)
最新推荐文章于 2022-08-28 20:58:22 发布