程序员面试宝典之数据结构基础----④单链表排序(读后)

来源:互联网 发布:iphone5s软件闪退 编辑:程序博客网 时间:2024/05/14 14:37

单链表的排序:排序的方法有很多种,可以根据排序时间复杂度或空间复杂度分,而对于单链表的排序,能交换的只能是相邻节点的值,这就让我想到,最好用冒泡排序。逻辑上最为简单,只需知道一个节点和他的下一个节点即可,只需一个辅助指针,排序时只是在相邻节点间互换节点值。

当然单链表的排序方法还很多,比如快速排序,只需两个节点指针,都从前往后遍历,每次都按照head节点值分开,而且效率比较高。比如选择排序也可以用。本例只给出冒泡排序算法:

node* sort_list(node* head){    node* p1;    int n;    int temp;    n = length(head);    if(NULL == head || NULL == head->next)    return head;    p1 = head;    for(int i = 0; i<n; i++)    {        p1 = head;        for(int j = 0; j< n-i; j++)        {            if(p1->data > p1->next->data)            {                temp = p1->data;                p1->data = p1->next->data;                p1->next->data = temp;            }            p1 = p1->next;        }    }    return head;}


原创粉丝点击