数据结构--------------静态表的希尔排序
#define?LT(a,b)?((a)<?(b))
#define?EQ(a,b)?((a)==(b))
#define?LQ(a,b)?((a)<=(b))
typedef?struct?ElemType
{//表中元素結構
?int?key;
?char?name[20];
}ElemType;
typedef?struct?SSTable
{//靜態(tài)表結構
?ElemType?*elem;
?int?length;
}SSTable;
ElemType?r[20];//全局變量,用于傳值給表元素
void?Create_SqTable(SSTable?&T,int?n)
{//創(chuàng)建順序表
?T.elem=new?ElemType?[n];
?for(int?i=1;i<=n;i++)//靜態(tài)表第一個元素不用
??T.elem[i]=r[i-1];
?T.length=n;
}
void?InPut(SSTable?&T)
{//順序表的錄入
?char?c='#';
?static?int?n=0;
?while(c!='!')
?{
?cout<<"元素關鍵字:";
?cin>>r[n].key;
?cout<<"元素名字:";
?cin>>r[n].name;
?n++;
?c=getchar();
?}
?Create_SqTable(T,n);
}
//思想:
//先將整個序列分成若干個子序列,再對子序列進行直接插入排序
//待到子序列基本有序,則對全體記錄進行一次直拉插入排序
void?ShellInsert(SSTable?&L,int?dk)
{//dk是前后記錄的增量
?int?j;
?for(int?i=dk+1;i<=L.length;++i)
??if(LT(L.elem[i].key,L.elem[i-dk].key))
??{
???L.elem[0]=L.elem[i];
???for(j=i-dk;j>0&<(L.elem[0].key,L.elem[j].key);j-=dk)
????L.elem[j+dk]=L.elem[j];
???L.elem[j+dk]=L.elem[0];
??}
}
void?ShellSort(SSTable?&L,int?dlta[],int?t)
{//對t個記錄進行希排序
?for(int?k=0;k<t;k++)
??ShellInsert(L,dlta[k]);
}
void?Print(SSTable?L)
{
?for(int?i=1;i<=L.length;i++)
??cout<<L.elem[i].key<<"?"<<L.elem[i].name<<endl;
}
轉載于:https://www.cnblogs.com/zhangjunjie/p/3368241.html
總結
以上是生活随笔為你收集整理的数据结构--------------静态表的希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫介绍
- 下一篇: Procexp.exe —— 强大的进程