我有一个学生结构,它将是一个包含学生姓名,四个GPA编号及其平均GPA的学生数组。
struct Student
{
string name;
double gpa[4];
double averageGPA;
};
我正在尝试使用插入排序按学生姓名按字母顺序对此学生结构数组进行排序。到目前为止,我已经提出了这个问题,ptr是指向结构的指针。我已经尝试过运行它,但我收到一条错误消息,指出' operator ='不匹配。它必须是我试图比较元素的方式,这导致了这个错误?
void insertionSort(Student* ptr[])
{
const int MAX = 10;
int current = 1;
int last = MAX - 1;
int temp;
int walker;
while (current <= last)
{
temp = ptr[current];
walker = current - 1;
while (walker >= 0 && temp < ptr[walker])
{
ptr[walker+1] = ptr[walker];
walker = walker - 1;
}
ptr[walker+1] = temp;
current = current + 1;
}
}
答案 0 :(得分:1)
以下是使用插入排序解决问题的完整解决方案:
struct Student
{
string name;
double gpa[4];
double averageGPA;
};
我已经定义了一个交换两个Student
实体的函数:
void swap(Student* a, Student* b)
{
Student temp;
temp.name = a->name;
for(int i=0; i<4; i++)
temp.gpa[i] = a->gpa[i];
temp.averageGPA = a->averageGPA;
a->name = b->name;
for(int i=0; i<4; i++)
a->gpa[i] = b->gpa[i];
a->averageGPA = b->averageGPA;
b->name = temp.name;
for(int i=0; i<4; i++)
b->gpa[i] = temp.gpa[i];
b->averageGPA = temp.averageGPA;
}
这是基本的插入排序算法:
void insertionSort(Student* ptr)
{
const int MAX = 10;
int current = 1;
int last = MAX - 1;
Student *temp;
int walker;
while (current <= last)
{
temp = &ptr[current];
walker = current - 1;
while (walker >= 0 && temp->name < ptr[walker].name)
{
swap(temp,&ptr[walker]);
temp = &ptr[walker];
walker = walker - 1;
}
current = current + 1;
}
}
我已经测试了这段代码并且有效。
基本上,您将Student
数组传递给插入排序(例如void insertionSort(Student* ptr[])
)的位置不正确,因为您使用[]
或{{1}而且他们可以代表同样的事情。