在中國大學mooc上學習了分別用單鏈表和順序表實現有序表的二路歸併,為加深印象與理解,自己操作了一下。
有序表中所有有序表以遞增或遞減的方式有序排列。
兩個有序表l1和l2合併成乙個有序表l3。
//有序表的二路歸併單鏈表實現
#include
typedef
struct node
list;
void
createlist
(list *
&l,int n)
//尾插法建立單鏈表
r->next =
null
;//最後的尾節點要指向null
}void
combine
(list *l1, list *l2, list *
&l3)
//有序表l1和l2二路歸併為有序表l3
else
}while
(p !=
null
)while
(q !=
null
) r->next =
null;}
void
(list *l3)
//列印鍊錶
}int
main()
執行結果如下:
l1和l2中每個元素恰好遍歷一遍,時間複雜度和空間複雜度都為(m+n)。
//用順序表實現二路合併
#include
#define maxsize 100
typedef
struct
//定義順序表
list;
void
create
(list *
&l,int n)
//建立順序表
l->length = n;
}void
combine
(list *l1, list *l2, list *
&l3)
//合併順序表
else
}while
(i != l1->length)
while
(j != l2->length)
l3->length = k;
}void
(list *l3)
//列印鍊錶
l1和l2中每個元素恰好遍歷一遍,時間複雜度和空間複雜度都為(m+n)。
如果還有更好的方法,請指出。
歸併排序(二路歸併)
歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為n nn個一元組,兩兩合併得到二元組,以此類推共合併log 2n log 2n log2 n 次後,陣列變得有序。時間複雜度為o n logn o nlogn o nlog n 編譯環境de...
二路歸併 插入歸併 原地歸併
插入歸併 歸併排序的時間複雜度為o nlgn 空間複雜度為o n 但是一般來講,基於從單個記錄開始兩兩歸併的排序並不是特別提倡,一種比較常用的改進就是結合插入排序,即先利用插入排序獲得較長的有序子串行,然後再兩兩歸併 改進後的歸併亦是穩定的,因為插入排序是穩定的 之所以這樣改進是有原因的 儘管插入排...
鍊錶二路歸併排序
給你鍊錶的頭結點head,請將其按公升序排列並返回排序後的鍊錶。例如 4 2 1 3 排序 1 2 3 4 要求時間複雜度o nlongn 空間複雜度 o 1 節點結構 public class listnode listnode int val listnode int val,listnode ...