对输入'age'名称进行排序,然后显示结果

sorting 'age' of names entered then displaying the result

本文关键字:排序 然后 显示 结果 输入 age      更新时间:2023-10-16

我想按输入的姓名的升序对年龄进行排序,然后根据这一顺序显示列表。我已经设法对它们进行了排序,但相对于它们的年龄,我似乎无法正确显示它们的名字。

这是我的代码:-

#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 **********nn";
    cout << "tName" << "tt" << "Agenn";
    for (i=0 ; i<5 ; i++)
    {
        cout << "t" << name [i] << "tt" << 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 << "nn******* Sorted data (w.r.t age) *******nn";
    cout << "tName" << "tt" << "Agenn";
    for (i=0 ; i<5 ; i++)
    {
        cout << "t" << name [i] << "tt" << age [i];
        cout << endl;
    }
    return 0;
}

最后一个for循环出现问题。你们中有谁能帮我实现这个逻辑吗?

更改交换逻辑。交换姓名和年龄。

    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中的条件封装到函数中,这样您就可以轻松地更改逻辑。

当您用年龄(age)对数组进行排序时,年龄和它们的名称之间的连接会得到列表:在排序之前,名称和相应的年龄存储在同一索引中。

要解决这个问题,你可以做,例如,如果采用以下方法:

  1. 当在排序过程中交换两个年龄时,也会交换两个名称
  2. 使用带有指示名称的指针或索引的辅助数组,并在年龄之外交换名称或索引(类似于第一种方法,但避免交换字符串)。打印时,您可以通过此辅助区域找到相关名称
  3. 在数组中存储一对名称和年龄,并交换这些对,但仅使用年龄部分来确定排序顺序

还可以使用年龄交换相应的名称。

还有一个建议,每当你有这样的链接数据时,最好使用该结构,因为将相对数据作为一个组是有意义的。

而且,如果你交换它们,所有的数据都会被交换,所以不会出现这种类型的问题。

由于年龄通常从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 **********nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<5 ; i++)
{
    cout << "t" << name [i] << "tt" << age [i];
    cout << endl;
}
//The sorting , hashing actually 
for (i=0 ; i<5 ; i++)
{
    strcpy(ary[age[i]],name[i]);
}
cout << "nn******* Sorted data (w.r.t age) *******nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<120 ; i++)
{
    if(strcmp(ary[i],""))
    cout<<ary[i]<<" "<<i<<"n";   // The index will be equal to age
}
return 0;
}
相关文章: