泡泡排序。 C ++

时间:2014-02-24 15:02:53

标签: 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) 任何和所有帮助泡沫排序代码或如何让它在排序后显示将是很好的。 请把我的问题投票给我,或告诉我如何改革它以减少烦恼而不仅仅是抱怨。并随时帮助我编辑我的问题中的任何内容(如果可以的话)。

3 个答案:

答案 0 :(得分:2)

更改

for (int j = 0; j<n - 1; j++)

for (int j = 0; j<i - 1; j++)
在你的bubblesort函数中

答案 1 :(得分:1)

我只是快速浏览一下,但我认为你在冒泡排序中使用它之前没有声明n。 另外,我不认为你在那里做的是泡泡排序。试试这个:

void bubblesort()
{
    int k=1;
    while (k==1)
        {
            k=0;
            for (i=1;i<=n;i++)
            {
                if (mylist[i]>=mylist[i-1])
                {
                    temp=mylist[i];
                    mylist[i]=mylist[i-1];
                    mylist[i-1]=temp;
                    k=1;
                }
            }
        }
}

为你的例子修改它,我相信它会起作用:)

答案 2 :(得分:1)

首先在main函数中声明mylist并尝试在bubblesort函数中访问它,而不是person类的一部分。另一件事是你无法比较两个对象,因为你正在对列表进行排序。您可以根据age成员变量对mylist对象列表进行排序。在person class中添加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");
}

我认为这应该有效。 phewww ...