每天一个小算法(Shell Sort3)

希尔算法自己编了一个,循环很多,很不美观,不过运行正确:

c语言实现:

#include <stdio.h>
#include <stdlib.h>
#define LEN 20
 
int main()
{
	int d,i,j,k;
	int arr[]={20,19,16,17,11,12,13,18,14,15,10,9,8,7,6,5,4,3,2,1};
	int key;

	for(d=LEN/2;d>0;d--)
		for(i=0;i<d;i++)
			for(j=i+d;j<LEN;j=j+d)
			{
				k=j;
				key=arr[j];
				while(k>0 && arr[k-d]>key)
				{
					arr[k]=arr[k-d];
					k=k-d;
				}
				arr[k]=key;
			}

	for(i=0;i<LEN;i++)
		printf("%d
",arr[i]);
}


运行结果:


明天任务:

好好思考希尔排序的实现;想一想如何优化比较好。

原文地址:https://www.cnblogs.com/batteryhp/p/5020511.html