smallest = arr[0]
smallest_index = 1 # Я специально поставил один чтобы увидеть что в конце оно выкинет один
А вот не надо ставить 1 специально, когда надо ставить 0.
Смысл приведенного алгоритма - мы принимаем, что нулевой элемент массива - самый маленький. Соответственно, запоминаем, что это минимальное значение находится по индексу 0.
Дальше, начиная с первого элемента, просматриваем весь массив и, если какой-то элемент меньше минимального, то 1) записываем новый минимум и 2) запоминаем его позицию.
А Вы принимаете за минимальный элемент нулевой, но запоминаете, что он находится во второй ячейке массива (почему-то). А потом удивляетесь, почему не работает...