我的冒泡排序代码有什么问题以及如何在排序后(在 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/