пузырьковая сортировка C ++

0

Что не так с моим кодом сортировки пузыря и как я могу его записать после сортировки (до 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).
Любая помощь с кодом сортировки пузыря или как его отобразить после сортировки будет приятной. Пожалуйста, проголосуйте за мой вопрос или скажите мне, как я мог бы реформировать его, чтобы сделать его менее раздражающим, а не просто жаловаться. И не стесняйтесь помогать мне редактировать что-либо в моем вопросе (если можете).

  • 2
    Компилятор сказал вам, в чем заключается основная проблема - вам нужно передать массив и размер списка в качестве аргументов / параметров в сортировку, иначе он не сможет с ними работать, потому что они объявлены как локальные в main () или не указаны вообще :(
  • 0
    Значит, «n» должно быть 4 в этом случае? :( Я шведка, поэтому английский иногда затрудняет понимание> <Если бы я понял это правильно, я мог бы переименовать n в max и установить max в 4? Чтобы сделать его более понятным для меня
Показать ещё 3 комментария
Теги:
bubble-sort

3 ответа

1
Лучший ответ

Первое, что вы объявили mylist в главной функции и пытаетесь получить к нему доступ в функции bubblesort которая не является частью класса person. Другое дело, что вы не можете сравнивать два объекта, как вы делаете, чтобы отсортировать список. Вы можете отсортировать список объектов mylist на основе переменной возрастного члена. Добавьте getAge() в класс person.

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...

  • 0
    Спасибо друг! Поэтому я должен добавить getage () после имени строки и int age в классе person? что именно это будет делать и как мне сделать этот метод?
  • 0
    Я отредактирую свой ответ и постараюсь охватить все ...
Показать ещё 7 комментариев
1

+ Изменить

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

в

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

в вашей функции bubblesort

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

измените его для своего примера, и я уверен, что он будет работать :)

  • 0
    Так нет времени? : o так какое время заменяет мою пустотную пузырьковую сортировку? и что означает aux? Я совершенно новичок в пузырчатой сортировке и новичок в c ++, поэтому мне действительно нужно понять этого приятеля. Извините за то, что был немного глупым ^^ и спасибо за ваш ответ, я попробую код, предоставленный вами, в меру моих возможностей!
  • 0
    я использовал aux. он делает то же самое, что вы делаете с темп. извините за неправильное объяснение, я спешил
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню