10.2.3希尔排序
============================================================
e1:希尔排序(算法)。
void ShellInsert(Sqlist &L, int dk) {
//对顺序表L作一趟希尔插入排序。本算法是和一趟直接插入排序相比,作了以下修改:
//1.前后
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
位置的增量是dk,而不是1;
//2.r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到。
for(i=dk+1;i<=L.length;++i)
{
if LT(L.r[i].key,L.r[i-dk].key) /*需将L.r[i]插入有序增量子表*/
{
L.r[0]=L.r[i]; /*暂存在L.r[0]*/
for(j=i-dk; j>0 && LT(L.r[0].key, L.r[j].key) ; j-=dk)
L.r[j+dk]=L.r[j]; /*记录后移,查找插入位置*/
L.r[j+dk]=L.r[0]; /*插入*/
}//if LT(L.r[i].key,L.r[i-dk].key)
}//for(i=dk+1;i<=L.length;++i) }/*ShellInsert*/
void ShellSort(Sqlist &L,int dlta[],int t) {
//按增量序列dlta[0..t-1]对顺序表L作希尔排序。
for(k=0;k
(b)) #define LH +1 //左高。
#define EH 0 //等高。
#define RH -1 //右高。
//
#define MAXSIZE 20 //一个用作示例的小顺序表的最大长度。 typedef int KeyType; //定义关键字类型为整数类型。 typedef char InfoType; typedef struct
{
KeyType key; //关键字项。
InfoType otherinfo; //其它数据项。
}RedType; //记录类型。
typedef struct
{
RedType r[MAXSIZE+1]; //r[0]闲置或用作哨兵单元。
int length; //顺序表长度。
}SqList; //顺序表类型。
//对顺序表L作一趟希尔插入排序。本算法是和一趟直接插入排序相比,作了以下修改: //1.前后记录位置的增量是dk,而不是1;
//2.r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到。 void ShellInsert(SqList &L, int dk) { printf("--------------------------------------in_ShellInsert_begin_dk=%d--\n",
dk);
int i,j;
for(i=dk+1;i<=L.length;++i)
{
if LT(L.r[i].key,L.r[i-dk].key) /*需将L.r[i]插入有序增量子表*/
{
L.r[0]=L.r[i]; /*暂存在L.r[0]*/
for(j=i-dk; j>0 && LT(L.r[0].key, L.r[j].key) ; j-=dk)
L.r[j+dk]=L.r[j]; /*记录后移,查找插入位置*/
L.r[j+dk]=L.r[0]; /*插入*/
}//if LT(L.r[i].key,L.r[i-dk].key)
}//for(i=dk+1;i<=L.length;++i) //
for(int x=0;x<11;x++)
{
printf("%3d",L.r[x].key);
}
printf("\n");
//
}/*ShellInsert*/
//按增量序列dlta[0..t-1]对顺序表L作希尔排序。
void ShellSort(SqList &L,int dlta[],int t) { int k;
for(k=0;k
本文档为【10.2.3希尔排序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。