关闭

Middle-题目63:147. Insertion Sort List

45人阅读 评论(0) 收藏 举报
分类:

题目原文:
Sort a linked list using insertion sort.
题目大意:
使用插入排序对单链表排序。
题目分析:
使用直接插入排序,即从第二个元素开始,每次寻找它应该在前面的有序区间内所在的位置。
源码:(language:c)

struct ListNode* insertionSortList(struct ListNode* head) {
    if(!head || !head->next)
        return head;
    else {
        struct ListNode* sortedHead = (struct ListNode*)malloc(sizeof(struct ListNode));
        sortedHead->val = head->val;
        sortedHead->next = NULL;

        for (struct ListNode* node = head->next; node; node = node->next) {
            if(node->val <= sortedHead->val) { // this node is smaller than the smallest node of sortedHead
                struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
                newNode->val = node->val;
                newNode->next = sortedHead;
                sortedHead = newNode;
            }
            else {
                struct ListNode* temp;
                for(temp = sortedHead; temp; temp = temp->next) {
                    if(temp->val <= node->val && (!temp->next || temp->next->val >node->val)) { //insert this node after temp
                        struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
                        newNode->val = node->val;
                        newNode->next = temp->next;
                        temp->next = newNode;
                        break;
                    }                       
                }
            }
        }
        return sortedHead;
    }
}

成绩:
76ms,beats 25%,众数72ms,25%
cmershen的碎碎念:
本题代码还是过于复杂,而且可以在有序区使用二分查找优化之。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:56527次
    • 积分:3205
    • 等级:
    • 排名:第10668名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论