C++ 插入排序以使;年份“;列表顶部的0个

C++ 插入排序以使;年份“;列表顶部的0个,c++,insertion-sort,C++,Insertion Sort,我有一系列关于建筑物的信息,其中一项是“年建造”: buildingnumber[buildingsloaded].yearBuilt 我试图使用插入排序对数据进行排序,从最旧的建筑到最新的建筑,但它一直报告同一个建筑的k。(k是我想看的建筑物数量) void InsertionSort(列出buildingnumber[SIZE],int BuildingLoaded) { int键=0,i=0; 对于(int j=1;jkey&&i>=0) { 建筑编号[i+1]=建筑编号[i]; 我-

我有一系列关于建筑物的信息,其中一项是“年建造”:

 buildingnumber[buildingsloaded].yearBuilt
我试图使用插入排序对数据进行排序,从最旧的建筑到最新的建筑,但它一直报告同一个建筑的k。(k是我想看的建筑物数量)

void InsertionSort(列出buildingnumber[SIZE],int BuildingLoaded)
{
int键=0,i=0;
对于(int j=1;jkey&&i>=0)
{
建筑编号[i+1]=建筑编号[i];
我--;
}
buildingnumber[i+1]。YearBuild=key;
}
}

您的代码很混乱。您可以编写一个排序,只比较某个对象的一部分(如
yearbuild
),但在实际执行排序时,您必须移动(或交换)整个对象,而不仅仅是键

所以你的代码可以这样改进

     list b = buildingnumber[j]; // whole building
     key = b.yearBuilt;
     while (...)
     {
         ...
     }
     buildingnumber[i+1] = b;  // whole building
现在还不能完全确定代码是否正确(还没有检查),但至少你会更接近


另一件事,为什么您的建筑对象被称为
list
Building
不是更好的名字吗?代码名非常重要,而且很容易更改。如果你能为你的类型和变量取一个好名字,这表明你对这个问题考虑得很清楚。不要吝啬于此或认为这无关紧要。

发布的代码在

while(buildingnumber[i].yearbuilded>key&&i>=0)

因为条件必须以相反的顺序书写:

while(i>=0&&buildingnumber[i].yearbuilded>key)


原因是当
我为什么不使用
std::sort
?希望这是为了实践,在“buildingnumber[i+1]=buildingnumber[i]”中你想做什么?你想交换吗?
     list b = buildingnumber[j]; // whole building
     key = b.yearBuilt;
     while (...)
     {
         ...
     }
     buildingnumber[i+1] = b;  // whole building