[leetcode]Insertion Sort List
2015-03-25 13:56
260 查看
Sort a linked list using insertion sort.
正好复习一下插入排序,它时间复杂度是O(n^2).
最优复杂度:当输入数组就是排好序的时候,复杂度为O(n)
(快速排序在这种情况下会产生O(n^2)的复杂度)。
最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
它是一种In-place sort,不需要额外的空间消耗。
实现的算法如下:
![](http://img.my.csdn.net/uploads/201301/03/1357220939_7742.png)
(/article/7665056.html)
这一题特殊之处就是使用链表,链表不能随机读取。所以写起来稍微复杂一些。
正好复习一下插入排序,它时间复杂度是O(n^2).
最优复杂度:当输入数组就是排好序的时候,复杂度为O(n)
(快速排序在这种情况下会产生O(n^2)的复杂度)。
最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
它是一种In-place sort,不需要额外的空间消耗。
实现的算法如下:
![](http://img.my.csdn.net/uploads/201301/03/1357220939_7742.png)
(/article/7665056.html)
这一题特殊之处就是使用链表,链表不能随机读取。所以写起来稍微复杂一些。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL||head->next == NULL) return head; ListNode * p,*q; for(p=head->next;p!=NULL;p=p->next){ int key = p->val,pre = head->val,tmp; bool flag = false; ListNode *cur; for(q=head;q!=p;q=q->next){ if(q->val < key) { pre = (q->next)->val; continue; } //给应该插入的地方留空位 tmp = (q->next)->val; (q->next)->val = pre; pre = tmp; //记录应该插入的地点 if(flag == false){ cur = q; flag = true; } } if(flag) cur->val = key; } return head; } };
相关文章推荐
- Leetcode习题:Insertion Sort List
- LeetCode - Insertion Sort List
- leetcode之Insertion Sort List
- 【LeetCode】Insertion Sort List
- leetcode insertionSortList
- leetcode题目解答---Insertion Sort List
- LeetCode:Insertion Sort List
- [Leetcode] #147 Insertion Sort List
- Insertion Sort List(leetcode)
- leetcode之Insertion Sort List
- Leetcode: insertion-sort-list
- LeetCode-Insertion Sort List-链表插入排序-链表操作
- leetcode_147题——Insertion Sort List(线性表,插入排序)
- 【leetcode】Insertion Sort List
- LeetCode - Insertion Sort List
- Java for LeetCode 147 Insertion Sort List
- LeetCode Insertion Sort List
- LeetCode-Insertion Sort List[AC源码]
- Insertion Sort List Leetcode java
- LeetCode 147 Insertion Sort List