有序表的二路歸併

2021-10-02 22:28:52 字數 1704 閱讀 4111

在中國大學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

print

(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

print

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