Я впрочем не шибко вкурсе каноничности, но в рамках быстродействия ты раз прогоняешь цикл в цикле чтоб определить максимальное значение, второй раз прогоняешь цикл в цикле чтобы определить минимальное значение. Затем по циклу чтоб определить их индексы. И затем их свапаешь.