因为你贴出来的代码缺少Student类,所以无法运行。
从你的排序部分代码来看,Swap(Student *p1, Student *p2)函数,应该是不会错的,这个完成的无非是数据的交换;问题主要在void Studentmassage::Sort()里面,你需要单步运行跟踪,进入两个for语句中,看数据是否每次正确的传入。
这样排序可能不行啊。交换应该会让指针指向错误的位置。
我觉得是,没仔细看
应该另外建立一个head,从原来链表取走结点插入新的链表。
大概是这样:
void Studentmassage::insertAfter(Student *student,Student *iStudent){
auto tail=student->next;
student->next=iStudent;
iStudent->next=tail;
}
void Studentmassage::sort(){
auto sHead=head;
sHead->next=nullptr;
for(auto iStudent=head->next;iStudent!=nullptr;iStudent=iStudent->next){
if(iStudent->sumsum){
iStudent->next=sHead;
sHead=iStudent;
}
else{
for(auto student=sHead;student!=nullptr;student=student->next){
if(student->next==nullptr||student->sum<=iStudent->sum){
insertAfter(student,iStudent);
break;
}
}
}
}
head=sHead;
}
你可以在排序的方法里面先输出所有信息,排序之后输入信息,比较一下,看看哪里出现问题
你没有说清出的什么问题啊
要是算法问题,排序不正确,大家从算法上帮你分析
要是编译不通过,大家从语法上给你分析啊
我从头到尾看了一遍,还没发现问题呢