首页 > 解决方案 > 类中的插入排序?

问题描述

我是 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;
    }

标签: c++classinsertion-sort

解决方案


插入排序的算法不需要新的数组进行排序。插入排序背后的想法是循环遍历数组两次。

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

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

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

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

PS 请记住在您之后删除 A 变量,new否则您的程序会有内存泄漏。


推荐阅读