我想按相应输入名称的升序对年龄进行排序,然后根据该列表显示列表。我已经设法对它们进行排序,但我似乎无法正确地显示它们的年龄。
这是我的代码: -
#include <iostream>
using namespace std;
int main()
{
char name [5][25];
int age [5];
int i;
for (i=0 ; i<5 ; i++)
{
cout << "Enter name " << i+1 << " : ";
cin >> name [i];
cout << "Enter age : ";
cin >> age [i];
cout << endl;
}
cout << "\n********** Your entered data **********\n\n";
cout << "\tName" << "\t\t" << "Age\n\n";
for (i=0 ; i<5 ; i++)
{
cout << "\t" << name [i] << "\t\t" << age [i];
cout << endl;
}
int hold;
for (i=0 ; i<5 ; i++)
{
for (int j=0 ; j<5 ; j++)
{
if (age [j] > age [j+1])
{
hold = age [j];
age [j] = age [j+1];
age [j+1] = hold;
}
}
}
cout << "\n\n******* Sorted data (w.r.t age) *******\n\n";
cout << "\tName" << "\t\t" << "Age\n\n";
for (i=0 ; i<5 ; i++)
{
cout << "\t" << name [i] << "\t\t" << age [i];
cout << endl;
}
return 0;
}
问题在于最后一个for
循环。你们中的任何人都可以帮我实现这个逻辑吗?
答案 0 :(得分:1)
更改交换逻辑。交换名称和年龄。
char holdstr[25]; ///Temporary string to swap.
if (age [j] > age [j+1] || (age[j] == age[j+1])
{
//Swap the age and name both.
hold = age [j];
strcpy(holdstr, name[j]);
age [j] = age [j+1];
strcpy(name[j], name[j+1]);
age [j+1] = hold;
strcpy(name[j+1], holdstr);
}
你应该将条件包含在if中,以便你可以轻松地改变你的逻辑。
答案 1 :(得分:1)
当您使用年龄(age
)对数组进行排序时,年龄及其名称之间的连接将获得列表:排序之前,名称以及存储在同一索引中的相应年龄。
要解决您可以解决的问题,例如,如果出现这些问题,请执行以下操作:
答案 2 :(得分:1)
同时将相应的名称换成年龄。
还有一个建议,每当你有这样的链接数据时,最好使用结构,因为将相关数据保持为一个组是有意义的。
而且,如果你交换它们,所有数据都将被交换,因此不会出现这类问题。
答案 3 :(得分:1)
由于年龄通常在1到120之间变化:),我们可以利用这个优势。使用映射技术将年龄映射到数组索引。当您的数据集扩展时,它将大大加快排序速度。我已经为5个人演示了这个,但是可以通过链接链表来轻松修改它以适用于大型数据集。
#include<cstring>
#include <iostream>
using namespace std;
int main()
{
char name [5][25];
int age [5];
int i;
char ary[120][25]; // The array used to map.
for(int i=0;i<120;i++)
strcpy(ary[i],""); //initialize to ""
for (i=0 ; i<5 ; i++)
{
cout << "Enter name " << i+1 << " : ";
cin >> name [i];
cout << "Enter age : ";
cin >> age [i];
cout << endl;
}
cout << "\n********** Your entered data **********\n\n";
cout << "\tName" << "\t\t" << "Age\n\n";
for (i=0 ; i<5 ; i++)
{
cout << "\t" << name [i] << "\t\t" << age [i];
cout << endl;
}
//The sorting , hashing actually
for (i=0 ; i<5 ; i++)
{
strcpy(ary[age[i]],name[i]);
}
cout << "\n\n******* Sorted data (w.r.t age) *******\n\n";
cout << "\tName" << "\t\t" << "Age\n\n";
for (i=0 ; i<120 ; i++)
{
if(strcmp(ary[i],""))
cout<<ary[i]<<" "<<i<<"\n"; // The index will be equal to age
}
return 0;
}