Credo - per quel poco che so - il problema sussista nel fatto che lui interpreti i numeri incrementati come stringhe, e non come numeri.

I nomi delle immagini da dove le prende?

Se da un db, il campo che contiene l'identificativo numerico deve essere INT o DECIMAL o comunque un campo numerico.

Se é un campo CHAR oppure VARCHAR oppure prende le immagini dal nome del file, lui le tratta come caratteri, ergo 20 arriva prima di 3.

Per ovviare, calcola quante immagini caricherai nei prossimi 80 anni, se sono meno di cento le nomini 01, 02, 03, 04... se sono più 001, 002 e così via...