c++ - 冒泡排序。 C++

标签 c++ bubble-sort

我的冒泡排序代码有什么问题以及如何在排序后(在 Linesearch 之前)将其写出。

我使用的代码基于我能在书中找到的唯一示例。在网上搜索了一些关于如何按年龄对数组列表进行排序的指南,但我找不到一个(至少,没有一个对我来说不是太高级的)。所以我带着另一段代码回来了,这可能会让你的眼睛流血 ^^ 抱歉。

#include <iostream>
#include <string>
using namespace std;


class person
{
public:
string name;
int age;

void SetInfo(const string _name, int _age)
{
    name = _name;
    age = _age;
}
int getAge(){ return age; }
};

int Linearsearch(person* personarray, int key)
{
for (int i = 0; i < 10; i++)
{
    if (personarray[i].age == key)
        return i;
}
return -1;
}

void bubblesort(person mylist[], int n)
{
for (int i = 1; i<n; i++)
{

    for (int j = 0; j<n - 1; j++)
    {
        if (mylist[j].getAge() > mylist[j + 1].getAge())
        {
            person temp;
            temp = mylist[j];
            mylist[j] = mylist[j + 1];
            mylist[j + 1] = temp;
        }
    }
}
}

int main()//start of program
{
person mylist[4];//List of people
mylist[0].SetInfo("Calle", 22);
mylist[1].SetInfo("Björn", 20);
mylist[2].SetInfo("Larry", 60);
mylist[3].SetInfo("Lena", 54);

//calling bubblesort()
bubblesort(mylist, 4);


int index = Linearsearch(mylist, 20);

if (index == -1)
    cout << "person not found!";
else
    cout << "the person you searched for " << mylist[index].name;

cin.get();
return 0;
system("pause");
}

我已经评论了我从代码中得到的错误//。

首先,我什至不知道我这里的冒泡排序代码会以年龄为目标并按照我希望的方式对其进行排序。

我已经尝试了没有冒泡排序代码的其余代码,它实际上工作得很好 (:D)。
任何有关冒泡排序代码或如何在排序后显示它的帮助都会很好。 请否决我的问题或告诉我如何对其进行改革以使其不那么烦人而不仅仅是提示。并随时帮助我编辑问题中的任何内容(如果可以的话)。

最佳答案

首先,您在 main 函数中声明了 mylist 并尝试在 bubblesort 函数中访问它,它不是 person 类的一部分。另一件事是您不能像对列表进行排序那样比较两个对象。您可以根据年龄成员变量对 mylist 对象列表进行排序。在 person 类中添加 getAge() 方法。

class person
{
    public:
        string name;
        int age; 

    void SetInfo(const string _name, int _age)
    {
        name = _name;
        age = _age;
    }
    int getAge(){return age;}
};

   void bubblesort(person mylist[],int n)
    {
        for (int i = 1; i<n; i++)
        {

            for (int j = 0; j<n - 1; j++) //n is "undefined" should n be the number of objects in the list maybe?
            {
                if (mylist[j].getAge() > mylist[j + 1].getAge()) //the first mylist is "undefined".
                {
                    person temp;
                    temp = mylist[j];
                    mylist[j] = mylist[j + 1];
                    mylist[j + 1] = temp;
                }
            }
        }
    }
int main()//start of program
{
    person mylist[4];//List of people
    mylist[0].SetInfo("Calle", 22);
    mylist[1].SetInfo("Björn", 20);
    mylist[2].SetInfo("Larry", 60);
    mylist[3].SetInfo("Lena", 54);

    //calling bubblesort()
    bubblesort(mylist,4);

    //list.display(); //list is undefined.

    int index = Linesearch(mylist, 20);

    if (index == -1)
        cout << "person not found!";
    else
        cout << "the person you searched for " << mylist[index].name;

    cin.get();
    return 0;
    system("pause");
}

我认为这应该可行。呸……

关于c++ - 冒泡排序。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21991369/

相关文章:

c++ - 运算符重载 - 重载 *

c++ - 如何获取平面描述的多边形的顶点

c++ - "Co"中的 "CoClass"是什么意思?

c - 冒泡排序需要很长时间然后出现段错误

java - 冒泡排序代码打印的额外行

C++ 冒泡排序和比较

c++ - 使用 std::stream 接口(interface)创建一个日志记录对象

c++ - MSVC 依赖与引用

c - C 中的冒泡排序数组错误 : Second integer is Always Zero

c++ - 增加堆栈不起作用