Отсортируйте один массив и получите соответствующие значения во втором массиве swap C

#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 и не знал, что такая вещь существует. Я написал программу так, как я это делал, поскольку именно так меня учили на курсе, который я прохожу. В любом случае, я прошу прощения за то, что расстроил вас, я действительно ценю вашу помощь.