每天一个小算法(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\n",arr[i]); }
运行结果:
明天任务:
好好思考希尔排序的实现;想一想如何优化比较好。