標籤:位置 size for link class 掃描 head public lis
Sort a linked list using insertion sort.
複雜度 o(n^2);
插入排序 (Insertion Sort)
設有一組關鍵字{K1, K2,…, Kn};排序開始就認為 K1 是一個有序序列;讓 K2 插入上述表長為 1 的有序序列,使之成為一個表長為 2 的有序序列;然後讓 K3 插入上述表長為 2 的有序序列,使之成為一個表長為 3 的有序序列;依次類推,最後讓 Kn 插入上述表長為 n-1 的有序序列,得一個表長為 n 的有序序列。
具體演算法描述如下:
- 從第一個元素開始,該元素可以認為已經被排序
- 取出下一個元素,在已經排序的元素序列中從後向前掃描
- 如果該元素(已排序)大於新元素,將該元素移到下一位置
- 重複步驟 3,直到找到已排序的元素小於或者等於新元素的位置
- 將新元素插入到該位置後
- 重複步驟 2~5
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode insertionSortList(ListNode head) { if(head == null || head.next == null) return head; ListNode dummy = new ListNode(0); ListNode pre = dummy; ListNode cur = head; while(cur != null){ ListNode next = cur.next; while( pre.next != null && pre.next.val < cur.val){ pre = pre.next; } //insert cur nodein pre and pre.next; cur.next = pre.next; pre.next = cur; pre = dummy; cur = next; } return dummy.next; }}
147. Insertion Sort List