There's nothing odd about the sort of alphanumeric string; '1' will always come before '2' and '2' will always come before '3' and so on.
Since in your example you dont have too many numbers but say you have a100 and a200 so a100 will always be less then a200 it is the way strcmp is defined.
So in short write the normal sorting program (whatever the way you like i.e. quicksort, bubblesort etc) and use strcmp for the comparion and keep this in mind for strcmp -
Syntax
int strcmp(const char *str1, const char *str2)
Return Value
if Return value is < 0 then it indicates str1 is less than str2
if Return value is > 0 then it indicates str2 is less than str1
if Return value is = 0 then it indicates str1 is equal to str2