插入排序:讲一个元素看做有序序列,其他元素看做无序序列,从无序序列中取出一个元素插入到有序序列中
- 时间复杂度 = O(n^2)
- 空间复杂度 = O(n)
题目:
使用插入排序对链表进行排序。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution{
public ListNode insertionSortList(ListNode head){
if(head==null || head.next==null) return head;
//头结点
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode p = head;
ListNode q;
ListNode temp;
while(p != null && p.next != null){
if(p.val <= p.next.val){
p = p.next;
}else{
//将链表中带插入的结点q删除
q = p.next;
p.next = q.next;
temp = newHead;
//找到第一个>=q.val的结点,将q.val插入到该结点的前面
while(temp.next.val <= q.val) temp = temp.next;
q.next = temp.next;
temp.next = q;
}
}
return newHead.next;
}
}