【急】链表冒泡排序,一跑起来就关闭程序QAQ
一个链表类,当创建之后,如果调用bubble_sort()就要关闭程序QAQ
是不是这个冒泡排序本身有缺陷QAQ 求指点
说明:p1,stu,p2是交换两个结点时使用的临时变量,p0指示内层循环的终止位置,初始值为NULL,内层循环一 次向前移动一个结点.直到p0指到第三个结点时为止.
每次判断,若stu的total成员小于p2的total成员,就使stu和p2交换.然后将p1,stu,p2顺次 后移,直到p2遇到p0为止.
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;
}
...全文
相关推荐
链表和冒泡排序
由于链表没有随机访问的特性,我们不能直接用冒泡排序的原始实现,而需要稍微修改一下。我们可以用一个临时数组先将链表元素存储下来,然后对数组进行冒泡排序,最后按照排序后的顺序重新构建链表。
DuLinkBubbleSort 双向链表实现冒泡排序
总结来说,要在双向链表上实现冒泡排序,你需要理解链表的结构,以及如何在链表上进行节点的交换操作。这个过程比在数组上实现冒泡排序更为复杂,因为涉及到更多的指针操作和链表结构维护。
单链表的冒泡排序
单链表的冒泡排序,热烈欢迎大家的下载,谢谢谢谢
C语言实现键盘输入数据构建链表后冒泡排序
本文详细介绍了链表的基本操作,包括创建、添加数据、打印、删除和冒泡排序。通过主函数调用这些函数,演示了链表的完整使用流程,包括用户输入数据处理和内存释放。同时,定义了链表结构体和相关函数声明。
链表的冒泡排序
对数字字符进行解析,用链表进行存储,并对链表运用冒泡排序法进行排序


新手乐园
