鍊錶排序(sort list)

2021-08-19 13:22:42 字數 1053 閱讀 1378

1、要求:

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

2、思路

因為題目要求複雜度為o(nlogn),故可以考慮歸併排序的思想。

歸併排序的一般步驟為:

1)將待排序陣列(鍊錶)取中點並一分為二;

2)遞迴地對左半部分進行歸併排序;

3)遞迴地對右半部分進行歸併排序;

4)將兩個半部分進行合併(merge),得到結果。

3、**:

/**

* definition for singly-linked list.

* struct listnode

* };

*//*

考點:1. 快慢指標;2. 歸併排序。

複雜度分析:

t(n) 拆分 n/2, 歸併 n/2 ,一共是n/2 + n/2 = n

/ \ 以下依此類推:

t(n/2) t(n/2) 一共是 n/2*2 = n

/ \ / \

t(n/4) ........... 一共是 n/4*4 = n

一共有logn層,故複雜度是 o(nlogn)

*/class solution

listnode* left = sortlist(p->next); //先後半部分

p->next = null;

listnode* right = sortlist(head);

return merge(left, right);

}listnode *merge(listnode *left, listnode *right)

else

p = p->next;

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

if (right) p->next = right;

return dummy.next;

}};

鍊錶排序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 組成,而根據鍊...

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

sort a linked list in o n log n time using constant space complexity.常見排序方法有很多,插入排序,選擇排序,堆排序,快速排序,氣泡排序,歸併排序,桶排序等等。它們的時間複雜度不盡相同,而這裡題目限定了時間必須為o nlgn 符合要...