148 Sort List (歸併實現鍊錶排序)

2021-08-04 20:36:22 字數 964 閱讀 3329

sort a linked list in o(n log n) time using constant space complexity.

常見排序方法有很多,插入排序,選擇排序,堆排序,快速排序,氣泡排序,歸併排序,桶排序等等。。它們的時間複雜度不盡相同,而這裡題目限定了時間必須為o(nlgn),符合要求只有快速排序,歸併排序,堆排序,而根據單鏈表的特點,最適於用歸併排序。**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

pre->next = null;

return merge(sortlist(head), sortlist(slow)); //遞迴實現歸併排序

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

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

if(l2) cur->next = l2;

return dummy->next;

}};

下面這種方法也是歸併排序,而且在merge函式中也使用了遞迴,這樣使**更加簡潔

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

pre->next = null;

return merge(sortlist(head), sortlist(slow)); //遞迴實現歸併排序

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

}};

鍊錶排序Sort List(歸併)

題目 sort a linked list in o nlog n time using constant space complexity.因為題目要求複雜度為o nlogn 故可以考慮歸併排序的思想。歸併排序的一般步驟為 1 將待排序陣列 鍊錶 取中點並一分為二 2 遞迴地對左半部分進行歸併排序...

Sort List (歸併排序鍊錶)

原文 解答一 歸併排序 遞迴法 題目要求時間空間複雜度分別為o nlogn o nlogn 和o 1 o 1 根據時間複雜度我們自然想到二分法,從而聯想到歸併排序 對陣列做歸併排序的空間複雜度為 o n o n 分別由新開闢陣列o n o n 和遞迴函式呼叫o logn o logn 組成,而根據鍊...

使 SortList 實現重複鍵排序

sortlist 預設對按key來排序,且key值不能重複,但有時可能需要用有重複值的key來排序,以下是實現方式 1 對強型別 以float為例 region 使sortlist能對重複鍵排序 internal class listcomparer icomparer region icompar...