C++升序排序和降序排序,我直接复制改了大于号和小于号,为啥降序(第二个)一运行就死?

求大家帮帮忙!谢谢!
这个是升序排序
void process_sort_by_res_inc()
{
Book *list = NULL;
Book *tmp, *tmp1;
tmp = books;
while (tmp != NULL)
{
Book *t = new Book(tmp->name, tmp->isbn, tmp->value, tmp->res, tmp->sales, tmp->is_on_sale);
if (list == NULL)
list = t;
else
{
if (t->res <= list->res)
{
t->next = list;
list = t;
}
else
{
tmp1 = list;
while (t->res > tmp1->next->res)
{
tmp1 = tmp1->next;
if (tmp1->next == NULL) break;
}
t->next = tmp1->next;
tmp1->next = t;
}
}
tmp = tmp->next;
}
process_clear(&books);
books = list;
}
下面是降序排序(我只改了大于号和小于号其他全部相同)
void process_sort_by_res_dec()
{
Book *list = NULL;
Book *tmp, *tmp1;
tmp = books;
while (tmp != NULL)
{
Book *t = new Book(tmp->name, tmp->isbn, tmp->value, tmp->res, tmp->sales, tmp->is_on_sale);
if (list == NULL)
list = t;
else
{
if (t->res >= list->res)
{
t->next = list;
list = t;
}
else
{
tmp1 = list;
while (t->res < tmp1->next->res)
{
tmp1 = tmp1->next;
if (tmp1->next == NULL) break;
}
t->next = tmp1->next;
tmp1->next = t;
}
}
tmp = tmp->next;
}
process_clear(&books);
books = list;
}

原来的升序代码:
                        else
{
tmp1 = list;
while (t->res > tmp1->next->res)
{
tmp1 = tmp1->next;
if (tmp1->next == NULL) break;
}
t->next = tmp1->next;
tmp1->next = t;
}

修改:

while (t->res > tmp1->next->res)
{
    tmp1 = tmp1->next;
    if (tmp1->next == NULL) break;
}
改成
if(tmp1->next != NULL){
    while (t->res > tmp1->next->res)
    {
        tmp1 = tmp1->next;
        if (tmp1->next == NULL) break;
    }
}

升序、降序的代码这里都有问题。

降序的类似这样改,加一个if(tmp1->next != NULL) 判断。

温馨提示:内容为网友见解,仅供参考
无其他回答

C++升序排序和降序排序,我直接复制改了大于号和小于号,为啥降序(第二...
= NULL){ while (t->res > tmp1->next->res) { tmp1 = tmp1->next; if (tmp1->next == NULL) break; }}升序、降序的代码这里都有问题。降序的类似这样改,加一个if(tmp1->next != NULL) 判断。

计算机 c++编程 10个数 排序 十个数排序,用不同方法实现两种排法:升序...
} cout<<"S:对数组进行升序排序"<<endl;cout<<"J:对数组进行降序排序"<<endl;cout<<"输入你的选择(S\/J):";cin>>c;switch(c){ case 'S':Maopao(a);break;case 'J':Charu(a);break;default:cout<<"选择错误!"<<endl;break;} for(i=0;i<M;i++){ cout<<a[i]<<" ";}...

【Python入门算法6】冒泡排序 Bubble Sort 的三种实现方法
对于降序排序,则只需要调整相邻元素比较的逻辑,将判断从大于号转换为小于号,即可实现列表的逆序排序。在处理实际问题时,比如LeetCode 283E 移动0问题,要求将列表中的元素0全部移动到列表的最右边,其他元素位置不变。虽然冒泡排序在处理这类问题中并不高效,但由于其简洁的实现方式,对于理解和学习算法...

相似回答
大家正在搜