void insertion_sort(int *data, unsigned int n) {
for (unsigned int uns = 1; uns < n; ++uns ) {
int next = data[uns];
unsigned int idx;
for (idx = uns; idx > 0 && data[idx - 1] > next; --idx) {
data[idx] = data[idx - 1];
}
data[idx] = next;
}
}
int main()
{
vector<Person> crew= ucitaj_osobe("osobe.txt"); /*this reads the file osobe.tx and stores it in vector crew,this works */
Person o;
insertion_sort(polje, 100); // ???
ispisi_osobe(popis); /* this prints out the vector,this works too*/
return 0;
}
如何将此向量发送到插入排序,并对其进行排序? 请帮忙,插入排序的代码是从其他来源实现的
答案 0 :(得分:2)
您的函数insertion_sort
用于对int
数组进行排序,该函数不能用于排序Person
个对象的向量。
如果您想对Person
个对象的矢量进行排序,我建议您使用标准库中的std::sort
。要使用它,您必须为<
个对象实现Person
运算符。
示例:强>
// Only to demonstrate.
struct Person {
std::string name;
int age;
};
// Implement according to your needs.
bool operator< (const Person& lhs, const Person& rhs) {
return lhs.name < rhs.name;
}
int main() {
vector<Person> crew = ucitaj_osobe("osobe.txt");
std::sort(begin(crew), end(crew));
ispisi_osobe(popis);
// return 0; Unnecessary in main function.
}
请注意,std::sort
不保证使用插入排序。
答案 1 :(得分:0)
您可以通过传递向量中第一个元素的地址,将指针传递给向量中的数组。
insertion_sort(&amp; crew [0],crew.size());
答案 2 :(得分:0)
您的insertion_sort
旨在对int
的数组进行排序
只有int
的数组。您不能在Person
的数组上使用它。
您没有说明为什么要使用此插入排序
std::sort
。但是如果你想在矢量上使用它
Person
,您必须将其第一个参数更改为Person*
,
并传递&crew[0], crew.size()
。一个更好的解决方案是
将其转换为直接取std::vector<Person>
而不是指针和大小。一个更好的解决方案是
一个带有两个双向迭代器的模板,并调用它
与crew.begin(), crew.end()
。