#c #arrays
#c #массивы
Вопрос:
using namespace std;
int main() {
int years = 0;
int startingYear = 0;
cout << "Enter the number of years: ";
cin >> years;
cout << "Enter the starting year: ";
cin >> startingYear;
int statArray[years];
int yearArray[years];
int length = sizeof(statArray)/sizeof(int);
for (int i = 0; i <length; i ) {
cout << "Enter the stat for the year " << startingYear << ": ";
cin >> statArray[i];
yearArray[i] = startingYear;
startingYear ;
}
for (int i = 0; i < length-1; i ) {
for (int j = 0; j < length-i-1; j ) {
if (statArray[j] > statArray[j 1]) {
int temp = statArray[j];
int tempYear = yearArray[j];
statArray[j] = statArray[j 1];
yearArray[j] = yearArray[j 1];
statArray[j 1] = temp;
yearArray[j] = tempYear;
}
}
}
for (int i = 0; i < length; i ) {
cout <<yearArray[i] << "|";
}
}
Первый массив сортируется просто отлично, значения во втором массиве не меняются местами.
Первый массив содержит спортивные результаты, а второй массив — список лет для этих результатов. Я сортирую первый массив в порядке возрастания. Мне нужен второй массив в качестве вывода.
Комментарии:
1. Какой бы учебник по C , предложенный »
int statArray[years];
» в качестве примера, должен быть выброшен и заменен лучшим учебником по C , потому что это нестандартный C .2. Какой лучший способ объявить его?
3. Используйте
std::vector
вместо этого.
Ответ №1:
Ваша логика для подкачки не соответствует. Обратите внимание, что «рабочий» присваивается индексу j 1
, а «нерабочий» — нет.
statArray[j 1] = temp;
yearArray[j] = tempYear;
Итак, исправление должно быть таким:
statArray[j 1] = temp;
yearArray[j 1] = tempYear;
Гораздо предпочтительнее использовать std::swap
для обмена значениями. Если есть какая-то сумасшедшая причина, по которой вы не можете использовать эту функцию, тогда напишите функцию swap самостоятельно, а не делайте это встроенным, как это. Это уменьшает беспорядок в коде и снижает вероятность ошибок:
std::swap(statArray[j], statArray[j 1]);
std::swap(yearArray[j], yearArray[j 1]);
Обратите внимание, что также вся эта операция может быть выполнена с std::sort
помощью instead, что намного, намного превосходит ваш собственный алгоритм. Его можно настроить таким образом, чтобы он сортировал массив индексов, который затем можно использовать для упорядочения любого количества массивов.
[Править] Я хотел бы поблагодарить OP за удаление их вопроса после того, как я нашел время, чтобы дать ответ. Спасибо за признание усилий этого сообщества по предоставлению бесплатной помощи.
Комментарии:
1. Эй, чувак, я не хотел просто удалять сообщение после того, как ты на него ответил. Я удалил сообщение, поскольку понял свою проблему. На момент удаления сообщения я не видел, чтобы кто-нибудь ответил. Я полагал, что это никто не видел. С учетом сказанного, я хочу поблагодарить вас за ваш ответ. Это очень ценится. Что касается функции swap, спасибо вам за это, я новичок в c и не знал, что такая вещь существует. Я написал программу так, как я это делал, поскольку именно так меня учили на курсе, который я прохожу. В любом случае, я прошу прощения за то, что расстроил вас, я действительно ценю вашу помощь.