插入在类中排序?

时间:2018-11-28 15:50:14

标签: c++ class insertion-sort

我是Cpp新手,我有一个问题,我找不到答案。因此,我使用课程编写了有关旅游景点的程序。在里面,我有景点的名称,地址和距市中心的距离。我所做的就是输入和输出。现在我不知道如何使用InsertionSort对它们进行排序。我需要另一个阵列吗? 我想按距离对它们进行排序,但不知道如何写。

这就是我拥有的

#include <iostream>
#include <string>
using namespace std;
class Tobekt {
  private: string name;
          string addres;
          int distance;


  public:
    void input(void);
    void output(void);
}; 

void Tobekt::input(){

   cout<<"Landmark name: ";
   getline(cin, name);
   getline(cin, addres);
   cout<<"Addres: "; 
    getline(cin, addres);
    cout<<"Distance from the city center:  ";
    cin>>distance;
}
void Tobekt::output(){
    cout<<endl;
    cout<<"Landmark name: "<<name<<endl;
   cout<<"Addres: "<<addres<<endl; 
    cout<<"Distance from the city center: "<<distance<<endl;

}

int main()
    { 
    int n;
    cout<<"Tourist landmarks:" ;
    cin>>n;
    Tobekt *A = new Tobekt[n];
    for(int i=0; i<n; i++)
    {
        A[i].input();
    }
    for(int i=0; i<n; i++)
    {
        A[i].output();
    }

return 0;
    }

3 个答案:

答案 0 :(得分:2)

您可以简单地使用标准库中的sort算法对数组进行排序,并提供自定义的排序条件。例如,在下面,按照距离对景点进行分类。

auto sort_criteria=[](const auto& a, const auto&b){
return a.distance < b.distance;
};

int main()
    { 
      Tobekt *A = new Tobekt[n];
      //read input
       sort(A, A+n, sort_criteria);
      //other stuff
    }

答案 1 :(得分:2)

Insertion Sort的算法不需要新的数组即可进行排序。插入排序背后的想法是在数组中循环两次。

  • 第一个循环是遍历数组中的“未排序”元素,并选择第一个“未排序”元素。
  • 第二个循环是将该元素与之前的“已排序”元素进行比较-如果其“较小”,则将其移到数组索引的开头并重复直到无法移动为止。

您可以访问此link,以更好地了解其工作原理。因此,您可能需要执行比较功能的功能。就像是...

bool SmallerDistance(const Tobekt& lhs, const Tobekt& rhs)
{
    return lhs.GetDistance() < rhs.GetDistance();
}

当然,您需要创建getter函数以获取与类的距离。另外,您始终可以创建operator<成员函数并与两个变量进行比较。

P.S。 new之后,切记要删除A变量,否则程序会发生内存泄漏。

答案 2 :(得分:0)

您可能会发现R. Lafore "Algorithms & Data Structures in Java"这本书很有用。关于排序算法有两章,包括带有相关代码段的插入排序。 (它说的是Java,但Java的语法接近C ++,并且书中有一节讨论了两种语言之间的差异。)