歸併排序的鍊錶實現

2021-08-24 18:02:36 字數 1053 閱讀 5092

利用歸併法可以對鍊錶進行排序,而且不需要占用額外空間.對於乙個無序鍊錶,先利用迴圈找到鍊錶的中值,再利用遞迴先將乙個鍊錶分成兩個鍊錶,逐步遞迴,遞迴停止的條件是鍊錶中只有乙個元素或是沒有元素的情況,然後完成鍊錶的有序.

#include #include #include #include #include #include using namespace std;

#define ok 1

#define error -1

#define true 1

#define false 0

typedef int status;

typedef struct node *link;

struct node;

//輸出鍊錶的函式

void print(link head)

printf("\n");

}//合併鍊錶的函式

link merge(link a, link b)

else

}//當其中乙個鍊錶為空時,將另乙個不為空的鍊錶整體連入c中

c->next = (a == null) ? b : a;

//將鍊錶c的頭結點返回

return head->next;

}//歸併排序函式

link mergesort(link c)

// 迴圈: 為了找到待歸併鍊錶的中值位置

while((b != null) && (b->next != null))

// 將b 指向中間位置.

b = c->next;

//將鍊錶斷為兩部分

c->next = null;

//對鍊錶的兩部分進行歸併

merge(mergesort(a), mergesort(b));

}int main()

else//插入鍊錶中除第乙個元素的情況

}//將頭節點返回

head = mergesort(head);

//輸出函式

print(head);

}

鍊錶歸併排序

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

鍊錶 歸併排序

時間複雜度o nlogn 空間複雜度o 1 include include 定義鍊錶 typedef struct listnode linklist linklist head null 建立鍊錶 linklist createlist int arr,int len rear next null...