Insertion Sort List
Sort a linked list using insertion sort.
/** * 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 *root = new ListNode(-INT_MAX); root->next = head; ListNode *pre = head; head = head->next; while(head){ ListNode *insert = root; while(insert != head&& insert->next->val <= head->val) insert = insert->next; if(insert==head){ pre = head; head = head->next; } else{ ListNode *tmp = insert->next; insert->next = head; pre->next = head->next; head->next = tmp; head = pre->next; } } head = root->next; delete root; return head; } };
插入排序,写一下数组的插入排序:
void insertionSort(vector<int> &vec){ for(int i = 1; i < vec.size();++i){ int key = vec[i]; int j = i - 1; for(; j>=0&&vec[j]>key; --j){ vec[j+1] = vec[j]; } vec[j+1]=key; } }