简体   繁体   English

气泡排序。 C ++

[英]bubble sort. C++

What is wrong with my bubble sort code and how do I get it to write out after sorting (before the Linesearch). 我的气泡排序代码有什么问题,如何在排序后(在Linesearch之前)将其写出。

I've used code based on the only example I could find in the book. 我使用的代码基于我在书中可以找到的唯一示例。 Searched around the net for some guide on how to sort an array list by age but I could not find one (at least, not one that wasn't too advanced for me). 在网上搜索了一些有关如何按年龄对阵列列表进行排序的指南,但我找不到一个(至少不是一个对我来说不太高级的列表)。 So I'm back with another piece of code that probably will make your eyes bleed ^^ Sorry. 因此,我又返回了另一段代码,这可能会使您的眼睛流血^^对不起。

#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");
}

I've commented the errors I get from the code I have with //. 我已经注释了我从//拥有的代码中得到的错误。

First of all, I do not even know it the bubble sort code I have here will target the age and sort it like I would like it to. 首先,我什至不知道我在这里使用的冒泡排序代码将针对年龄并按照我的意愿对其进行排序。

I've tried the rest of the code without the bubble sort code and it actually works just fine (:D). 我已经尝试了没有冒泡排序代码的其余代码,并且实际上工作得很好(:D)。
Any and all help with the bubble sort code or how to get it to show after sorting would be nice. 气泡排序代码或排序后如何显示的任何帮助都很好。 Please vote down my question or tell me how I could reform it to make it less annoying instead of just complaining. 请投票否决我的问题,或者告诉我如何进行修改以减少烦恼,而不仅仅是抱怨。 And feel free to help me edit anything in my question (if you can). 并随时帮助我编辑问题中的所有内容(如果可以)。

Change 更改

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

to

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

in your bubblesort function 在你的bubbleort函数中

i just took a quick look but i don't think you declared n before you used it in bubble sort. 我只是快速浏览了一下,但我不认为您在将它用于冒泡排序之前先声明了n。 also, i don't think that what you do there is bubble sort. 另外,我不认为你在做什么。 try this: 尝试这个:

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

modify it for your example and i'm sure it will work :) 修改它为您的示例,我敢肯定它将起作用:)

First thing you have declared mylist in main function and trying to access it in bubblesort function which is not a part of person class. 首先,您已在main函数中声明mylist ,并尝试在不属于person类的bubblesort函数中bubblesort进行访问。 Other thing is that you cannot compare two object as you are doing to sort the list. 另一件事是您无法像对列表进行排序那样比较两个对象。 You can sort mylist object list on the basis of age member variable. 您可以根据年龄成员变量对mylist对象列表进行排序。 Add getAge() method in 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");
}

I think this should work. 我认为这应该有效。 phewww... phewww ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM