线性表-归并算法
/*例如:有兩個線性表LA=(1,5,7,15)LB=(3,6,8,9,13,15,17)
則: LC=(1,3,6,8,9,13,15,15,17)
上述問題要求可知,LC中的數據元素或是LA中的數據元素,或是LB中的數據元素,則首先設LC為空表,然后將LA或LBs中的元素逐個插入到LC當中。
為使LC中元素按值非遞減排列,可設兩個指針i,j分別向LA和LB中的某個元素,若設i當所指的元素為a,j所指的元素為b則當前應插LC元素c為|-> b a>bc=|-> a a=b|-> a a<b顯然,設指針i的j的初使值為1,在所指元素插入LC之后,指針在表LA或LB中將順序后移。
*/
template<class T>
class merge<T>::
void MergetList(T La,T Lb, T Lc)
{
/*已知線性表La和Lb中的數據元素按值非遞減排列*/
/*歸并La和Lb得到新的線性表Lc,Lc的數據元素也按值非遞減排列*/InitList(Lc);i=j=1;k=0;La_len=ListLength(La);Lb_len=ListLength(Lb);while((i<La_len)&&(j<=Lb_len)){GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai<bj){ListInsert(Lc,++k,ai);++i;}else if (ai==bj){ListInsert(Lc,++k,ai);++i;++j;}else{ListInsert(Lc,++k,bj);++i;++j;}}while(i<=La_len){/*如果La沒有取完,則將La中的所剩元素插入到表Lc中*/GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){/*如果La沒有取完,則將La中的所剩元素插入到表Lc中*/GetElem(La,j++,bj);ListInsert(Lc,++k,bj);}
}/***********************************************************************-*/
/* MergeList */
/************************************************************************/
轉載于:https://www.cnblogs.com/zhangdongsheng/articles/1862055.html
總結
- 上一篇: DHL:jQuery框架学习使用总结,插
- 下一篇: 什么是 Silverlight?