c++ - 类中的插入排序?
问题描述
我是 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;
}
解决方案
插入排序的算法不需要新的数组进行排序。插入排序背后的想法是循环遍历数组两次。
- 第一个循环是遍历数组中的“未排序”元素并选择第一个“未排序”元素。
- 第二个循环是将该元素与之前的“排序”元素进行比较 - 如果它“更小”,则将元素移向数组索引的开头并重复直到它无法移动。
您可以访问此链接以更好地了解其工作原理。因此,您可能需要一个执行比较功能的函数。就像是...
bool SmallerDistance(const Tobekt& lhs, const Tobekt& rhs)
{
return lhs.GetDistance() < rhs.GetDistance();
}
当然,您需要创建 getter 函数来获取与班级的距离。或者,您始终可以创建operator<
成员函数并与两个变量进行比较。
PS 请记住在您之后删除 A 变量,new
否则您的程序会有内存泄漏。
推荐阅读
- ios - Swift 数组到字符串
- mongodb - MongoDB 小数舍入器
- php - https在php zend中的csv导出中创建问题
- docker - 挂载docker卷销毁文件?
- php - 如何创建正则表达式模式以删除特定标记后的换行符
- elasticsearch - 如何知道 Geopoint 是否在使用 elasticsearch 7 的多边形内?
- javascript - 基于 getBoundingClientRect() 问题的带有样式注入的 React.cloneElement
- qlikview - QlikView aggr 列表框中排除了多个值
- python - 使用 win32com.client 列出可用的消息属性
- python - 如何在 ggplot 中正确构建数据框以绘制不同的图表