c语言链表排序出错,直接排序初学者求大神

void sort(LinkList *list){
LinkList *p, *q;
list = list->next;
for (p = list; p ->next != NULL; p = p->next){
int k = p->score;
for (q = p->next; q != NULL; q = q->next) {
if (k < q->score) {
k = q->score;
}
if (q->next == NULL) {
q->score = p->score;
p->score = k;
}
}
}
}

全部评论
你的代码逻辑上太混乱了,而且还有一个bug,就是如果list->next == NULL的话第三行会直接报错。 先把直接选择排序的原理弄懂——每次选最小的数出来加入到已经排好序的数组 void sort(LinkList* list) { list = list->next; if (!list) return; for (LinkList* lp = list; lp != NULL; lp = lp->next) { LinkList* pos = lp; // 记录当前最小值的位置 for (LinkList* ptr = lp; ptr != NULL; ptr = ptr->next) { if (pos->score > ptr->score) { pos = ptr; } } swap(lp->score, pos->score); // 交换,把最小值放到已排列的尾部 } } 没有检验,仅供参考。多看看书上的例子,好好理解。
点赞 回复 分享
发布于 2018-06-04 18:17
楼主应该是要冒泡吧,算法错了,去网上看看
点赞 回复 分享
发布于 2018-06-04 01:18
你这逻辑本来就有问题吧,假如需要交换的数不是最后一个,你这个是默认最后一个交换,有没有判断一个样,什么意思呢,比如314,那么k=1时,这时候你交换的是3和4,序列就变成113…这样只要不是最后一个是最小数排序就一点意义都没有…没有运行看出来的,错了不要打脸…
点赞 回复 分享
发布于 2018-06-03 17:21

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务