歸併排序的實現(C語言鍊錶)

2021-09-27 12:47:00 字數 1178 閱讀 1370

/**

* 名稱: 歸併演算法的實現

* 日期: 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...