Я работаю над книгой на C++, и я немного застрял в одном из проблемных вопросов. Я работаю над изучением указателей, и в этой конкретной задаче мне нужно отсортировать массив структур (используя указатели) со строкой имени ученика и двойником их оценки. После сортировки элементы данных структуры по-прежнему должны совпадать, очевидно (т. Е. Правильное имя по-прежнему должно быть с их оценками).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;
}
}
Так что это то, что у меня есть. Я тоже не очень разбираюсь в алгоритмах сортировки, и это все очень ново для меня, поэтому я надеюсь, что это не ужасно испортилось. Если кто-нибудь из знающих в этих областях может указать мне в правильном направлении, это будет потрясающе.
В C++ в качестве аргументов функций не передаются указатели и размеры.Вместо этого используется стандартный контейнер (например, вектор) и передается начальный и конечный итератор. –