【急】链表冒泡排序,一跑起来就关闭程序QAQ

shenjinyu2012 2012-07-02 05:22:35
一个链表类,当创建之后,如果调用bubble_sort()就要关闭程序QAQ
class list_Graduate {
public:
Graduate* listhead;
Graduate* create(int n);
Graduate* create_null(int n);
Graduate* find(int n);
Graduate* move(int n);
Graduate* add(int n);
Graduate* bubble_sort();
void output();
void newfile(char* )const;
void loadfile(char* name)const;
};

是不是这个冒泡排序本身有缺陷QAQ 求指点
说明:p1,stu,p2是交换两个结点时使用的临时变量,p0指示内层循环的终止位置,初始值为NULL,内层循环一 次向前移动一个结点.直到p0指到第三个结点时为止.
每次判断,若stu的total成员小于p2的total成员,就使stu和p2交换.然后将p1,stu,p2顺次 后移,直到p2遇到p0为止.
Graduate* list_Graduate::bubble_sort(){
//排序函数
Graduate* p1;
Graduate* stu;
Graduate* p2;
Graduate* p0=NULL;
if(listhead==NULL || listhead->next==NULL) //没有结点或只有一个结点,直接退出。
return listhead;
if(listhead->next->next) //有两个结点,交换两个结点后退出。
{
if(listhead->get_sum()<listhead->next->get_sum())
{
stu=listhead;
listhead=listhead->next;
listhead->next=stu;
stu->next=NULL;
}
}
if(!listhead->next->next->next)return listhead;
while(p0!=listhead->next->next) //三个以上结点排序,使用冒泡排序法
{
p1=listhead;
stu=p1->next;
p2=stu->next;
while(p2!=p0)
{
if(stu->get_sum()<p2->get_sum())
{
Graduate* p;
p1->next=p2;
stu->next=p2->next;
p2->next=stu;
p=stu;stu=p2;p2=p;
}
p1=p1->next;stu=stu->next;p2=p2->next;
}
p0=stu;
}
if(listhead->get_sum()<listhead->next->get_sum())//特殊考虑前两个结点
{
stu=listhead;
listhead=listhead->next;
stu->next=listhead->next;
listhead->next=stu;
}
return listhead;
}
...全文
43 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧