经典希尔排序PPT
- 格式:ppt
- 大小:221.00 KB
- 文档页数:13


2. 希尔排序详细设计#include <stdio.h>#include <stdlib.h>#include <time.h>typedef int KeyType;typedef int OtherType;#define Max_Size 5000typedef 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<r[i-delta].key){RecordType t;t=r[i]; //备份r[i]for(j=i;j>0 && t.key<r[j-delta].key;j-=delta)r[j]=r[j-delta];r[j]=t;}}/*ShellInsert*/void ShellSort(RecordType r[], int length, int delta[], int n)/*对记录数组r做希尔排序,length为数组r的长度,delta 为增量数组,n为delta[]的长度 */{for(int i=0;i<n;++i)ShellInsert(r,length,delta[i]);}void main(){int i;RecordType r[Max_Size];int len;int delta[4]={6,4,2,1};printf("请输入待排序记录的长度:");scanf("%d",&len);srand((unsigned)time(NULL));for(i=1;i<=len;i++)r[i].key =rand();printf("\n待排序记录:\n");for(i=1;i<=len;i++)printf("%6d ",r[i].key);printf("\n");ShellSort(r,len,delta,4);printf("\n排序后的记录:\n");for(i=1;i<=len;i++)printf("%6d ",r[i].key);printf("\n\n");}测试结果。