1. 程式人生 > >[LeetCode] Insertion Sort List 連結串列插入排序

[LeetCode] Insertion Sort List 連結串列插入排序

Sort a linked list using insertion sort.


A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list

 

Algorithm of Insertion Sort:

  1. Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
  2. At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.
  3. It repeats until no input elements remain.


Example 1:

Input: 4->2->1->3
Output: 1->2->3->4

Example 2:

Input: -1->5->3->4->0
Output: -1->0->3->4->5

連結串列的插入排序實現原理很簡單,就是一個元素一個元素的從原連結串列中取出來,然後按順序插入到新連結串列中,時間複雜度為O(n2),是一種效率並不是很高的演算法,但是空間複雜度為O(1),以高時間複雜度換取了低空間複雜度。程式碼如下:

class Solution {
public: ListNode* insertionSortList(ListNode* head) { ListNode *dummy = new ListNode(-1), *cur = dummy; while (head) { ListNode *t = head->next; cur = dummy; while (cur->next && cur->next->val <= head->val) { cur = cur->next; } head->next = cur->next; cur->next = head; head = t; } return dummy->next; } };

類似題目:

參考資料: