鍊錶的歸併排序

2021-08-03 07:37:01 字數 841 閱讀 9798

歸併排序是典型的分治演算法思想:

劃分子

問題→求

解子問題

→合併子

問題的解

→得到原

問題的解

通過不斷遞迴地將鍊錶劃分為兩部分,直到不能劃分為止,回溯時合併前後兩段分別有序的鍊錶,直到得到原始鍊錶的有序狀態,整個排序過程時間複雜度為o(

nlog

n)。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

//把鍊錶分成兩部分

fast=slow->next;

slow->next=

null;

//排序左半部分

listnode *l1=sortlist(head);

//排序右半部分

listnode *l2=sortlist(fast);

//合併有序鍊錶

return mergetwosortedlist(l1,l2);

}listnode * mergetwosortedlist(listnode* l1,listnode*l2)else

p=p->next;

}if(l1) p->next=l1;

if(l2) p->next=l2;

return dummy.next;

}

};

鍊錶歸併排序

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