0
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;
}

如何将此向量发送到插入排序并对其进行排序?请帮忙,插入排序的代码是从另一个来源实现的

4

3 回答 3

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.
}

现场示例:http: //ideone.com/YEL7IV

请注意,std::sort不保证使用插入排序。

于 2013-07-25T15:29:55.667 回答
0

您可以通过传递向量中第一个元素的地址来传递指向向量中数组的指针。

插入排序(&船员[0],船员.size());

于 2013-07-25T15:29:28.357 回答
0

insertion_sort的设计旨在对 的数组进行排序int,并且仅对 的数组进行排序int。您不能在Person.

你没有说为什么要使用这种插入排序,而不是std::sort. 但是如果你想在向量上使用它 Person,你必须将它的第一个参数更改为Person*,并传递它&crew[0], crew.size()。更好的解决方案是将其转换为std::vector<Person>直接获取,而不是指针和大小。一个更好的解决方案是使用两个双向迭代器的模板,并使用crew.begin(), crew.end().

于 2013-07-25T16:06:45.137 回答