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

  

posted @ 2014-06-04 10:05  Sara Chi  阅读(131)  评论(0编辑  收藏  举报