It's not clear to me what the results you show don't seem to be understandable. As @jim89 said you are comparing strings and strings are compared using lexical, sometimes called dictionary, sort order.
Pointing out specifically what it is you don't understand about the results or at least what you expected the results to be would help us a lot to understand what the issue you are running into is.
You can sort the strings you are using to see what the lexical order is by using stringr:str_sort.
suppressPackageStartupMessages(library(tidyverse))
a <- "0.0.1"
b <- "0.0.5"
c <- "0.1.0"
v <- c(a, b, c)
v
#> [1] "0.0.1" "0.0.5" "0.1.0"
# sorted using current locale
str_sort(v)
#> [1] "0.0.1" "0.0.5" "0.1.0"
# sorted using French
str_sort(v, locale = "fr_FR")
#> [1] "0.0.1" "0.0.5" "0.1.0"
Created on 2018-03-09 by the reprex package (v0.2.0).
Both of these sorts show in my locale (en_US) and France lexically a is less than b and b is less than c. That is the same as what the less than comparisons in your examples show
suppressPackageStartupMessages(library(tidyverse))
a <- "0.0.1"
b <- "0.0.5"
c <- "0.1.0"
a < b # a less than b
#> [1] TRUE
a < c # a less than c
#> [1] TRUE
b < c # b less than c
#> [1] TRUE
Created on 2018-03-09 by the reprex package (v0.2.0).