You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链式队列节点使用冒泡排序按hourlySalary排序失效求助

问题排查与修复方案

核心错误点

  • 冒泡排序函数bubbleSort的比较条件存在笔误:原代码写为if(i->hourlySalary > i->hourlySalary),是同一个节点的薪资和自身比较,条件永远不成立,交换函数完全不会被触发,因此节点不会有任何排序效果。
  • 你当前写的双层循环逻辑属于选择排序的实现逻辑,不是标准冒泡排序的相邻节点比较逻辑,但修正比较条件后即可正常得到正确排序结果,如果需要严格符合冒泡排序的要求,可以再调整循环逻辑为相邻节点两两比较。
  • Swap交换函数的实现没有问题,通过交换节点内部数据的方式在当前场景下是可行的,不需要额外修改。

修正后的完整代码

#include <iostream>
using namespace std;
class myNumberIsEleven{
private:
    struct linkedlist{
        string firstName;
        string lastName;
        unsigned int age;
        char gender;
        int hourlySalary;
        linkedlist *linker;
    }*Ptr,*curPtr;

public:
    int counter=0;

    myNumberIsEleven(){
        Ptr=NULL;
    }
    void printList(){
        curPtr=Ptr;
        while(curPtr!=NULL){
            cout << curPtr->firstName << " " << curPtr->lastName << endl << curPtr->age << endl << curPtr->gender << endl << curPtr->hourlySalary << endl << "=====" << endl;
            curPtr=curPtr->linker;
        }
    }

    void add(int salary,string name,string lastname,int ageisjustanumber,char Gender){
        linkedlist *newPtr = new linkedlist;
        newPtr->hourlySalary = salary;
        newPtr->firstName = name;
        newPtr->lastName = lastname;
        newPtr->gender = Gender;
        newPtr->age = ageisjustanumber;
        newPtr->hourlySalary = salary;
        newPtr->linker = Ptr;
        Ptr = newPtr;
        counter++;
    }

    void Swap(linkedlist* a,linkedlist* b){
        string temp_firstName;
        string temp_LastName;
        unsigned int temp_Age;
        char temp_Gender;
        int temp_hourlySalray;

        temp_firstName = a->firstName;
        temp_LastName = a->lastName;
        temp_Age = a->age;
        temp_Gender = a->gender;
        temp_hourlySalray = a->hourlySalary;

        a->firstName = b->firstName;
        a->lastName = b->lastName;
        a->age = b->age;
        a->gender = b->gender;
        a->hourlySalary = b->hourlySalary;

        b->firstName = temp_firstName;
        b->lastName = temp_LastName;
        b->age = temp_Age;
        b->gender = temp_Gender;
        b->hourlySalary = temp_hourlySalray;
    }

    void bubbleSort(){
        // 仅修改了if判断的条件,把i和i比较改为i和j比较
        for(linkedlist* i=Ptr;i->linker != NULL;i=i->linker){
            for(linkedlist* j = i->linker;j!=NULL;j=j->linker){
                if(i->hourlySalary > j->hourlySalary){
                    Swap(i,j);
                }
            }
        }
        printList();
    }
};

int main()
{
    myNumberIsEleven myNameIsBerkan;
    myNameIsBerkan.add(1000,"berkan","iwontgivemysurname",21,'M');
    myNameIsBerkan.add(2100,"ah","be",31,'F');
    myNameIsBerkan.add(50,"uhmmm","something",10,'M');
    myNameIsBerkan.add(69000,"elon","musk",44,'M');
    myNameIsBerkan.bubbleSort();
    return 0;
}

运行修改后的代码,会按照hourlySalary从小到大输出所有节点信息。

内容的提问来源于stack exchange,提问作者Berkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:04