任务是实现一个bubblesort函数,然后在我的“familj”数组中使用linearsearch又名“linsok”。数组保持名称和年龄,所以我想在它们的年龄后对数组进行排序并将其打印出来。我有线搜索工作,但现在我坚持使用bubblesort。
问题是我不知道如何使我的冒泡排序代码适用于此代码。 所以我实现了第二段代码吗?
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
string namn;
int alder;
void skrivUt(string _namn, int _alder)
{
namn = _namn;
alder = _alder;
}
};
int linsok(Person* PersonArray, int key)
{
for (int i = 0; i < 4; i++)
{
if (PersonArray[i].alder == key)
return i;
}
return -1;
}
int main()
{
Person familj[4];
familj[1].skrivUt("Emma",23);
familj[3].skrivUt("Emilia",29);
familj[2].skrivUt("Johan",26);
familj[0].skrivUt("Timmy ",21);
int index = linsok(familj,22); //the age of the person im looking for.
if(index== -1)
cout << "Personen hittades ej!"; //person not found
else
//prints out the persons name and the index.
cout << "Personen heter " << familj[index].namn << " hen finns på index " << index << endl;
cin.get();
return 0;
}
这是我之前使用的泡泡排序代码,它起作用。
int p [] = {10,56,73,23,31,24,43};
int a = 6;
for (int i = 0; i < a; i++)
{
int nrLeft = a - i;
for (int j = 0; j < nrLeft; j++)
{
if (p[j] > p[j+1])
{
int temp = p[j];
p[j] = p[j+1];
p[j+ 1] = temp;
}
}
}
for(int i = 0; i < 7; i++)
cout << p[i] << endl;
cin.get();
答案 0 :(得分:0)
您可能希望将此转换为将Person
对象数组传递给它的函数及其大小,然后您只需访问要比较的部分。由于您将其作为函数实现,因此您可以像使用linsok
函数一样使用它,尽管您可能希望它返回已排序的数组而不是索引。
以下代码的免责声明:既不运行也不编译
Person* bubbleSort(Person* p, int size)
{
for (int i = 0; i < size; i++)
{
int nrLeft = size - i;
for (int j = 0; j < nrLeft; j++)
{
if (p[j].alder > p[j+1].alder)
{
Person temp = p[j];
p[j] = p[j+1];
p[j+ 1] = temp;
}
}
}
return p;
}
这是基于你用桤木排序它们(我猜是年龄?我不会说瑞典语(?))你只需要提供签名,并根据你的需要改变它,但基本的想法是您只需更改您比较的内容和数据类型。
另一种方法是返回int
或void
(但是你应该返回一个int来告诉你它是否成功),并传递一个指向数组的指针,所以签名中Person**
,并直接在该数组上运行,但这有点困难,可以说是不好的做法,具体取决于用例。