Эти символы абсолютно идентичны. Используются для относительных ссылок назад в историю от какой либо точки.
Например git reset HEAD^3 переключит текущую ветку на три коммита назад относительно текущего состояния.
Если задача стоит именно так, то она решается в два прохода. Первым проходом считаешь количество нулей, единиц и двоек, вторым проходом заполняешь массив заново, исходя из подсчитанного количества.