希尔排序
#include <stdio.h>#define MaxSize 100typedef int KeyType; /*关键字类型*/typedef char ElemType[10]; /*其他数据项类型*/typedef struct { KeyType key; /*关键字域*/ ElemType data; /*其他数据域*/} LineList; /*线性表元素类型*/void ShellSort(LineList R[],int n){ int i,j,gap; LineList tmp; gap=n/2; /*增量置初值*/ while (gap>0) { for (i=gap;i<n;i++) /*对所有相隔gap位置的所有元素组进行排序*/ { tmp=R[i]; j=i-gap; while (j>=0 && tmp.key<R[j].key)/*对相隔gap位置的元素组进行排序*/ { R[j+gap]=R[j]; j=j-gap; /*移到本组中的前一个元素*/ } R[j+gap]=tmp; j=j-gap; } gap=gap/2; /*减小增量*/ }}void main(){ LineList R[MaxSize]; KeyType a[]={75,87,68,92,88,61,77,96,80,72}; int n=10,i; for (i=0;i<n;i++) R[i].key=a[i]; printf("排序前:"); for (i=0;i<n;i++) printf("%3d",R[i].key); printf("\n"); ShellSort(R,n); printf("排序后:"); for (i=0;i<n;i++) printf("%3d",R[i].key); printf("\n");}