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;
}
}
}
}

全部评论
你这逻辑本来就有问题吧,假如需要交换的数不是最后一个,你这个是默认最后一个交换,有没有判断一个样,什么意思呢,比如314,那么k=1时,这时候你交换的是3和4,序列就变成113…这样只要不是最后一个是最小数排序就一点意义都没有…没有运行看出来的,错了不要打脸…
点赞 回复 分享
发布于 2018-06-03 17:21
楼主应该是要冒泡吧,算法错了,去网上看看
点赞 回复 分享
发布于 2018-06-04 01:18
你的代码逻辑上太混乱了,而且还有一个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

相关推荐

10-15 03:05
门头沟学院 Java
CADILLAC_:凯文:我的邮箱是死了吗?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务