Я работаю над книгой по C ++ и немного застрял в одном из трудных вопросов. Я работаю над изучением указателей, и в этой конкретной задаче мне нужно отсортировать массив структур (используя указатели) со строкой имени студента и удвоенной его оценкой. Очевидно, что после сортировки элементы данных структуры все равно должны совпадать (т. Е. Правильное имя должно совпадать с их оценками).
Здесь моя проблема. Пока что у меня есть сортировка, правильно расставляющая счеты в порядке возрастания, но имена перемешаны. Я не смог понять почему, отчасти потому, что все еще работаю над тем, чтобы полностью понять указатели и как их использовать. Я могу правильно делать пузырьковую сортировку, сохраняя имена с их оценками, но не сортировку по выбору. Любая помощь будет принята с благодарностью.
Вот функция, которую я имею для сортировки выбора:
void selection_sort(Student *ptr, int size) // selection sort - having some problems
{
int start,
min_index,
min_value;
for (start = 0; start < (size - 1); start++) {
min_index = start;
min_value = (ptr+start)->score;
for (int index = start+1; index < size; index++) {
if ( (ptr+index)->score < min_value) {
min_value = (ptr+index)->score;
min_index = index;
}
}
// the following line is where, i think, the problem is, but i haven't
// been able to figure out the solution, despite trying numerous approaches
*(ptr+min_index) = *(ptr+start);
(ptr+start)->score = min_value;
}
}
Так вот что у меня есть. Я тоже не очень хорошо разбираюсь в алгоритмах сортировки, и это все довольно ново для меня, так что я надеюсь, что это не ужасно запутано. Если бы кто-нибудь, знающий в этих областях, мог указать мне правильное направление, это было бы замечательно.