На самом деле не нужно для замены самих значений, вы можете установить дополнительный уровень косвенности и использовать его.
Перед сортировкой индексы инициализируются какукажите на соответствующие баллы:
index[0] = 0 score[0] = 30
index[1] = 1 score[1] = 10
index[2] = 2 score[2] = 20
index[3] = 3 score[3] = 0
Когда вы сортируете, вы фактически сортируете индексы на основе баллов, на которые они указывают, а не самих баллов.Таким образом, вместо следующего сравнения в вашем роде:
if score[i] > score[i+1] then swap score[i], score[i+1]
вместо этого вы используете:
if score[index[i]] > score[index[i+1]] then swap index[i], index[i+1]
После сортировки вы получите:
index[0] = 0 score[0] = 30
index[1] = 2 score[1] = 10 \ These two indexes have been swapped
index[2] = 1 score[2] = 20 / but NOT the scores.
index[3] = 3 score[3] = 0
Затем для перемещения точек вы используете косвенные индексы, а не прямые значения:
score[index[0]] += 10; score[index[3]] -= 10;
score[index[1]] += 5; score[index[2]] -= 5;
Затем вы полностью отбрасываете индексы, исходный массив не нуждается в восстановлении в своем первоначальном порядке, просто потому, что егозаказ никогда не был изменен.