| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 390 人关注过本帖
标题:单链表的选择排序
取消只看楼主 加入收藏
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
结帖率:76.92%
收藏
已结贴  问题点数:10 回复次数:1 
单链表的选择排序
程序代码:
//使用的是选择排序
void sort(struct Student *head){
    struct Student *p_one,*p_one0,*p_two,*p_two0,*end,*min,*temp=NULL;
    //因为要交换元素所以定义p_one0,p_two0表示前面的那个节点
    p_one=head;
    while(p_one!=NULL){ end=p_one; p_one=p_one->next; }//找出链表的最后一个节点的位置
    // 9 1 2 8 3 4 5 6
    for(p_one0=head,p_one=head;p_one!=end;p_one0=p_one,p_one=p_one->next){
        min=p_one;
        for(p_two0=p_one,p_two=p_one->next;p_two!=NULL;p_two0=p_two,p_two=p_two->next){
            if(min->num > p_two->num) min=p_two;
        }
        if(min!=p_one){
            if(head==p_one)//如果为第一个节点
                head=min;
            else//不是第一个
                p_one0->next=min;
            temp=min->next;
       
            if(p_one->next == min){//如果交换的是相邻的节点
                min->next=p_one;
            }else{//不是相邻的节点
                min->next=p_one->next;
                p_two0->next=p_one;       
            }
            p_one->next=temp;
       
            //交换地址 让指针归位 为了可以按照原有顺序遍历链表
            temp=p_one;
            p_one=min;
      
   min=temp;
        }
    }
} 
这是链表的选择排序,错误都要最后几行,但是差不出错误


[ 本帖最后由 陆嘉文 于 2015-8-18 17:13 编辑 ]
2015-08-18 17:08
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
收藏
得分:0 
回复 2楼 实际应用
那样更加的不可以,比如链条是a--b--c --d--f
遍历链条 到p_one指向 b的时候
p_one指向b min指向 d
交换之后
a--d--c--b--f
但是p_one指向b min指向 d
这个时候遍历的话,p_one->next就指向了f
所以要交换指针地址,让指针归位

2015-08-18 21:58
快速回复:单链表的选择排序
数据加载中...
 
   



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

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