【发布时间】:2021-03-23 13:22:13
【问题描述】:
假设我们有n 的房屋数量。这是一所房子:
struct Casa {
int id;
int membri;
};
我正在从 txt 文件中读取结构的大小和每个结构的 membri。第一个值是结构的大小 (n)。
5
2
8
6
10
4
从文件中读取时,我会增加 ID:
void citire(Casa house[], int n, std::ifstream & file) {
for (int i = 0; i < n; i++)
{
file >> house[i].membri;
house[i].id = i + 1;
}
}
如何根据membri升序输出房屋ID?
例如:
id: 1 - membri: 2
id: 2 - membri: 8
id: 3 - membri: 6
id: 4 - membri: 10
id: 5 - membri: 4
应该输出:
id: 1 - membri: 2
id: 5 - membri: 4
id: 3 - membri: 6
id: 2 - membri: 8
id: 4 - membri: 10
这是我尝试过的,但它不起作用,我不明白为什么:
void sortareSelectie(int v[], int n) {
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++) {
if (v[j] < v[min]) min = j;
}
// swap
temp = v[min];
v[min] = v[i];
v[i] = temp;
}
}
void sort(Casa house[], int n) {
int v[10], key[10];
for (int i = 0; i < n; i++) {
v[i] = house[i].membri;
}
sortareSelectie(v, n);
for (int i = 0; i < n; i++) {
std::cout << "Membri: " << v[i] << " - ID: " << house[i].id << std::endl;
}
}
我见过带有向量、结构和数组的示例。
How to obtain the index permutation after the sorting
keeping track of the original indices of an array after sorting in C
Sorting array and saving the old index in C++
Get the indices of an array after sorting?
https://www.geeksforgeeks.org/keep-track-of-previous-indexes-after-sorting-a-vector-in-c-stl/
我仍然不明白如何在我的示例中应用它。
问题是我不想也不能使用向量、lambda 或任何预定义的 sort 函数编程语言可以有。
是的,这是给学校的。
很抱歉,我不知道这是如何工作的。
【问题讨论】:
-
您将使用std::sort 并编写简短的
comp()函数来告诉std::sort对结构的membri字段进行排序。 -
如我所说,我不能使用
std::sort。 -
那看看它是怎么排序的,复制一下。不要重新发明轮子。
-
抱歉,这是否包括 C
qsort()?这是另一个快速稳健的选择。否则,选择排序或插入排序 /t 与气泡短排序一样糟糕。如果您要排序的结构少于 10,000 个——它们真的没关系,冒泡排序等就可以了。 -
我不知道怎么做。这就是这个问题的重点!即使在查找后我也不知道如何实现它。