#merge演算法
假定有乙個陣列a[1…m],p,q,r,為它的三個索引,a[p…q],a[q+1,r]各自公升序排列,
我們需要重新使得a[p,r]也按公升序排列,我們用兩個指標s和t分別指向p和q+1,定義乙個輔助陣列b[r-p+1],比較a[s]和a[t],若前者小於等於後者,則將a[p]存放到我們先前建立的輔助陣列中,然後更新指標s,使s指向後一位,繼續比較a[s和[t],將小的乙個存放到輔助陣列中,然後更新指標s或t,迴圈結束的條件是s=q+1或t=r+1;
若s=q+1,則將a[t…r]中的剩餘的元素都新增到輔助陣列中,若t=r+1,則將a[s…q]中剩餘的元素都新增到輔助陣列中。至此,我們得到了公升序排列的合併陣列b,若想更新到a陣列中,就將a陣列中p…r中的元素替換成b陣列中1…r-p+1的元素即可。
##**
void
merge
(int a,
int b,
int p,
int q,
int r)
兩個已排序鍊錶的合併
1 typedef struct nodenode,linklist 5 void merge linklist la,linklist lb,linklist lc 6 9 if lb 10 node p 11 12 確定最大值在la上,還是lb上 13 if la.data lb.data 14...
如何合併兩個已排序的表?
這裡的表可以是陣列或者是鍊錶等,並且已經從小到大排好順序,我們的任務就是將這兩個表合併成乙個表。首先,如果給定的表是兩個鍊錶,最簡便的方法就是用遞迴的辦法 definition for singly linked list.public class listnode public class sol...
合併兩個已排序的鍊錶
題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使得新煉表中的結點仍然按照順序排序 分析 這個問題一出來,馬上就可以想到遞迴的思想,這種思想在鍊錶以及樹的操作中相當常見,在本題中主要涉及的還是鍊錶中值得比較,比較出較小的結點就插入新的鍊錶中,然後再比較下乙個結點,直接上 就一目了然了。public s...