合併兩個已排序的表

2021-10-03 13:54:19 字數 528 閱讀 8714

#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...