2. 希尔排序 详细设计
#include
typedef struct {
KeyType key;
OtherType other_data; }RecordType;
void ShellInsert(RecordType r[], int length, int delta)
/*对记录数组r做一趟希尔插入排序,length为数组的长度,delta 为增量*/ {
int i,j;
for(i=1+delta;i<=length;i=i+delta)
//1+delta为第一个子序列的第二个元素的下标 if(r[i].key RecordType t; t=r[i]; //备份r[i] for(j=i;j>0 && t.key void ShellSort(RecordType r[], int length, int delta[], int n) /*对记录数组r做希尔排序,length为数组r的长度,delta 为增量数组,n为delta[]的长度 */ { for(int i=0;i ShellInsert(r,length,delta[i]); } void main() { int i; RecordType r[Max_Size]; int len; 1 / 2 int delta[4]={6,4,2,1}; printf(\请输入待排序记录的长度:\ scanf(\ srand((unsigned)time(NULL)); for(i=1;i<=len;i++) r[i].key =rand(); printf(\待排序记录:\\n\ for(i=1;i<=len;i++) printf(\ printf(\ ShellSort(r,len,delta,4); printf(\排序后的记录:\\n\ for(i=1;i<=len;i++) printf(\ printf(\} 测试结果 2 / 2