Bubblesort提供访问冲突

时间:2012-10-30 20:56:53

标签: c++ arrays file sorting bubble-sort

大家好我正在尝试完成课程作业,我需要按照他们的身份证号码对一个满是员工的档案进行排序。文件中有10行,每行包含员工信息。订单为ID LASTNAME FIRSTNAME

在编写sort函数并将所有数据正确复制到数组之前,程序运行正常,但是现在添加了sort函数后,我不断获得访问冲突,没有提示是什么导致它。

我将不胜感激。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class Employee
{
public:
    int _id;
    string _lastName;
    string _firstName;

    Employee()
    {
        _id = 0;
        _lastName = "n/a";
        _firstName = "n/a";
    }
};

void copyFile10(Employee [], int);
void sortFile10(Employee [], int);
int main()
{
    const int size10 = 10;
    Employee employees10[size10];

    copyFile10(employees10, size10); //1.fill array/copy file
    sortFile10(employees10, size10); //2. sort

    system("pause");
    return 0;
}

void copyFile10(Employee employees10[], const int size)
{
    ifstream data10("data_10.dat");
    for(int count = 0; count < 10; count++) //1.fill array/copy file
    {
        data10 >> employees10[count]._id;
        data10 >> employees10[count]._lastName;
        data10 >> employees10[count]._firstName;
    }
    data10.close();
}

void sortFile10(Employee employees10[], const int size)
{
    Employee buff1;
    Employee buff2;
    int counter = 0;
    bool ordered = false;

    while (ordered == false)
    {
        for(int count = 0; count < size-1; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)
            {
                buff1._id = employees10[count+1]._id;
                buff1._lastName = employees10[count+1]._lastName;
                buff1._firstName = employees10[count+1]._firstName;

                buff2._id = employees10[count]._id;
                buff2._lastName = employees10[count]._lastName;
                buff2._firstName = employees10[count]._firstName;

                employees10[count]._id = buff1._id;
                employees10[count]._lastName = buff1._lastName;
                employees10[count]._firstName = buff1._firstName;

                employees10[count+1]._id = buff2._id;
                employees10[count+1]._lastName = buff2._lastName;
                employees10[count+1]._lastName = buff2._lastName;

                counter++;
            }
            if(counter == 0)
            ordered = true;
            else
                counter = 0;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

for(int count = 0; count < size; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)

循环的最后一次迭代(即count为9时)会发生什么?