| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 831 人关注过本帖
标题:单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了
取消只看楼主 加入收藏
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了
// 单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了,怎么改进下.. 假设数据类型为整型。
void sort(Linklist head)
{
    ListLnode *p,*rear,*r,*k;
         
        int min;
        rear=head;
                   p=head;   // 想法这样的 始终 保持 r 为 p 的前驱
        r=p;
        k=head->next; // k 指向第一个节点
        while(k)
        {  
            min=k->data;
            for(r=p,p=p->next;(r&&p);r=p,p=p->next)
            {
                if(min>p->data)
                   min=p->data;
            }
            if(min==k->data)   //j假如第一个节点经过遍历是最小的
            {   
                p=k;
                r=p;
                k=k->next;   // k向后移动 r和p 始终保持前驱和后继的关系

            }
            else
            {
                r->next=p->next;  // 取出最小的节点
                p->next=rear->next; // 插入到第一个节点的前面
                rear->next=p;
                rear=p;   // 这一步想着 rear 能够指向当前的最小值节点
                r=p;
                k=p->next; // k 继续向后移动 实现下一步遍历
            }

        }
   
}
搜索更多相关主题的帖子: 移动 
2011-06-12 22:18
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
收藏
得分:0 
回复 2楼 laoyang103
我想知道 怎么错的,我想在自己的程序上改下.。。
2011-06-12 22:44
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
收藏
得分:0 
回复 3楼 cosdos
我的基本思想 是 遍历出最小的数据 节点插到最前面,然后继续遍历找到最小的 依次插到后面.....就是这样想的...你有好的算法?
2011-06-12 23:08
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
收藏
得分:0 
回复 9楼 cosdos
很感谢,我好像知道,自己错到哪里了,我去修改下我写的....
2011-06-13 15:35
快速回复:单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了
数据加载中...
 
   



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

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