插入排序算法:
- 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
- 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
- 重复直到所有输入数据插入完为止。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
Java代码:
class Solution {
public ListNode insertionSortList(ListNode head) {
if (null == head)
return null;
ListNode start = head, end = head, p = head.next;
while (null != p) {
if (p.val >= end.val) {
p = p.next;
end = end.next;
continue;
}
if (p.val <= start.val) {
ListNode tmp = p.next;
end.next = tmp;
p.next = start;
start = p;
p = tmp;
continue;
}
ListNode q = start;
while (q != end) {
if (q.val < p.val && q.next.val < p.val) {
q = q.next;
continue;
}
ListNode tmp = p.next;
end.next = tmp;
p.next = q.next;
q.next = p;
p = tmp;
break;
}
}
return start;
}
}