| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2536 人关注过本帖
标题:单链表排序问题
只看楼主 加入收藏
leaf_yyl
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:19
专家分:104
注 册:2011-8-13
收藏
得分:5 
单向链表的快速排序
typedef struct LIST
{
    int value;                    //value只是个代表
    struct LIST* next;
}list;
void quicksort(list* head,list* tail);
list* partition(list* head,list* tail);
void quicksort(list* head,list* tail)        //head是头指针,不参与排序
{
    list *l;
    if (head->next==tail||head==tail)
        return;
    l=partition(head,tail);                //l->next已经排好序了
    quicksort(head,l);
    quicksort(l->next,tail);
}
list* partition(list* head,list* tail)
{
    list *p1,*p2,*p3;

    p1=head->next,p2=tail;
    while (p2->next!=p1)
    {
        while(p1->value<tail->value)p1=p1->next;
        while (p2->value>=tail->value&&p2!=head)
        {
            for(p3=p2,p2=head;p2->next!=p3;p2=p2->next);            //单向链表的悲剧,p2=p2->pre
        }
        if(p2->next!=p1)                                            //p1,p2值互换
        {
            p1->value+=p2->value;
            p2->value=p1->value-p2->value;
            p1->value-=p2->value;
        }
    }
    if(p1==tail)                            //p1是尾指针?是:返回p2;否:p1和tail值互换后返回p2
        return  p2;
    p1->value+=tail->value;
    tail->value=p1->value-tail->value;
    p1->value-=tail->value;
    return p2;
}

[ 本帖最后由 leaf_yyl 于 2011-8-17 21:10 编辑 ]
2011-08-17 21:09
海风27
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-17
收藏
得分:0 
回复 10楼 QQ346957135
多谢大侠出手相助,敢问大侠贵姓?

[ 本帖最后由 海风27 于 2011-8-19 01:08 编辑 ]
2011-08-19 00:14
qwerwqily
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2011-08-26 10:14
快速回复:单链表排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066776 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved