Что не так с моим кодом сортировки пузыря и как я могу его записать после сортировки (до 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).
Любая помощь с кодом сортировки пузыря или как его отобразить после сортировки будет приятной. Пожалуйста, проголосуйте за мой вопрос или скажите мне, как я мог бы реформировать его, чтобы сделать его менее раздражающим, а не просто жаловаться. И не стесняйтесь помогать мне редактировать что-либо в моем вопросе (если можете).
Первое, что вы объявили 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...
+ Изменить
for (int j = 0; j<n - 1; j++)
в
for (int j = 0; j<i - 1; j++)
в вашей функции bubblesort
я просто быстро посмотрел, но я не думаю, что вы объявили 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;
}
}
}
}
измените его для своего примера, и я уверен, что он будет работать :)