Middle-题目63:147. Insertion Sort List

来源:互联网 发布:淘宝开店推广费用 编辑:程序博客网 时间:2024/05/17 18:17

题目原文:
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
原创粉丝点击