求教一个排序问题

sasgsc 2010-11-28 02:30:02
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<fcntl.h>
#include"student_grade.h"

//sort linked list by final grade score in descending order
student *sort_finalGrade(student *head){
student *left = NULL;
student *miniNode = NULL;
student *end = head;
student *tmp = NULL;
int sorted;

do{
end = head;
while(end!=miniNode){
left = end->next;
if(left != NULL){
if(end->stu_final_aver < left->stu_final_aver){
tmp = left->next;
left->next = end;
end->next = tmp;
}
}// end outer if
end = end->next;
}// end while
miniNode = end;
head = left;
}while(head != miniNode);
return head;
}

//print the sorted list to the output file
void write_OutPut(student *head,FILE *fout){
//head = sort_finalGrade(head);
student *p=head;
char tmp[1024]={0};
while (p!=NULL){
sprintf(tmp,"%s %d\nWeighted percentile score:%3.0lf\nFinal grade:%0.1lf\n\n",
p->student_name,p->student_id,
p->stu_final_aver,p->student_final
);
fwrite(tmp,1,strlen(tmp),fout);
p=p->next;
}// end while
}


一个冒泡排序的类, 感觉有问题, 请高手指教
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
somebody 2010-11-29
  • 打赏
  • 举报
回复
楼主单步调试吧!
断点再断点!

这样才可以提高能力!
luciferisnotsatan 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ouyh12345 的回复:]

如果有编译问题,贴出错误号
如果运行有问题,单步跟踪
[/Quote]
+1
sasgsc 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 libinfei8848 的回复:]

好像问过一次了
[/Quote]
问过很多次了 也改了很多次 不过还是没搞明白
modyaj 2010-11-29
  • 打赏
  • 举报
回复
昨天我就看过一遍了
建议楼主 像这样的问题可以根据你自己的代码在草稿纸上画画
做足够认为多的情况下来检验你自己是错在那里
ouyh12345 2010-11-29
  • 打赏
  • 举报
回复
如果有编译问题,贴出错误号
如果运行有问题,单步跟踪
libinfei8848 2010-11-29
  • 打赏
  • 举报
回复
好像问过一次了
熊熊大叔 2010-11-29
  • 打赏
  • 举报
回复

student *sort_finalGrade(student *head)
{
student *left = NULL;
student *miniNode = NULL;
student *end = head;
student *tmp = NULL;
int sorted;

do
{
end = head;
while(end!=miniNode)
{
left = end->next;
if(left != NULL)
{
if(end->stu_final_aver < left->stu_final_aver)
{
tmp = left->next;
left->next = end;
end->next = tmp;
/*end的前一个节点的next应该指向left了, 但没有修改仍指向end*/
}
}
end = end->next;
}
miniNode = end; /*退出循环时end总是NULL, 因此miniNode也总是NULL, 不会变化*/
head = left; /*应该是head = head->next吧*/
}while(head != miniNode);
return head; /*???*/
}
xspace_time 2010-11-29
  • 打赏
  • 举报
回复
先简单阐述一下冒泡的原理,我只懂语法,只会看代码
cap77 2010-11-29
  • 打赏
  • 举报
回复
交换p2和p3两个节点可以这样:

p1->p2->p3->

student *temp=p1->next->next;
p1->next->next=temp->next;
temp->next=p1->next;
p1->next=temp;

如果交换p1和p2则另行考虑
Ack_001 2010-11-29
  • 打赏
  • 举报
回复
3楼已经回答得非常仔细!
飘过~
sasgsc 2010-11-29
  • 打赏
  • 举报
回复
自己顶..
zhutianjin4355255 2010-11-29
  • 打赏
  • 举报
回复
我也帮忙顶吧

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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