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;
}
}