插入排序c ++向量

时间:2013-07-25 15:25:31

标签: c++

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

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

3 个答案:

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

实例: http://ideone.com/YEL7IV

请注意,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()