/**
* 名稱: 歸併演算法的實現
* 日期: 2019.8.29
* */
#include
#include
typedef
struct cell *list;
struct cell
;list merge
(list list1, list list2)
;list split
(list list)
;list mergesort
(list list)
;list makelist()
;void
printlist
(list list)
;int
main()
list makelist()
else
}void
printlist
(list list)
printf
("\n");
}list mergesort
(list list)
}/**
* 用兩個已排序表生成乙個只包含這兩個表中所有元素的已排序表
* 從表頭開始分析他們,在每一步中,我們找出兩個表當前開頭位置中較小的那個,
* 選擇該元素作為合併後的表的下乙個元素,並將該元素從他原來所在的表中刪除,使得
* 該錶具有乙個新的「首位」元素,兩個表開頭元素相同時會選取第乙個表開頭的元素
* args: 指向兩個給定表的指標
* return: 指向合併後的表的指標
* */
list merge
(list list1, list list2)
else
}/**
* 將這些元素「處理」進兩個表,其中乙個表由第乙個、第三個、第五個等元素組成,
* 而另乙個表則由偶數字置的元素組成。更確切地說,split函式會將偶數編號的
* 元素從作為引數給出的表中刪除,並返回乙個由這些偶數編號元素組成的新錶。
* split是個具有***的函式,它會從作為引數給出的表中刪除偶數字置的單元,
* 而且它會將這些單元組合成乙個作為該函式返回值的新錶
* */
list split
(list list)
}
歸併排序的鍊錶實現
利用歸併法可以對鍊錶進行排序,而且不需要占用額外空間.對於乙個無序鍊錶,先利用迴圈找到鍊錶的中值,再利用遞迴先將乙個鍊錶分成兩個鍊錶,逐步遞迴,遞迴停止的條件是鍊錶中只有乙個元素或是沒有元素的情況,然後完成鍊錶的有序.include include include include include i...
鍊錶歸併排序
include include include include include using namespace std typedef int type typedef struct nodetag node node build type a,int n pnode pnext null retu...
鍊錶歸併排序
主要思路 1 如果為null或者只有乙個節點那麼直接返回 2 將鍊錶分成兩部分,分別進行排序,形成兩個有序鍊錶 3 將兩個有序鍊錶合併 void merge sort struct node list void split struct node head,struct node lista,str...