The numbers with only one decimal are auto-formatted as a number. The ones with two decimal places are auto-formatted as text. Since a sort will always place numbers before text and will always sort text beginning with 10 before 12 and those before text beginning with 3, your sort turns out looking a bit strange.
There is only one work around that I am aware of and it's going to be time consuming to set it up.
First, create a new column to the left of where your numbers are now located. Now, strip your existing numbers out into 3 different columns where those numbers with only one decimal place will have a 3rd column containing a 0 (zero). For example using your first number, put a 3 in one column, a 10 in the next and a zero in the third. You can put these three columns way to the right of your data for now and hide them later. Now delete the entire column with your original numbers in it.
In that new column you created, type the following formula (change the cell reference to match the 3 columns you put your numbers into).
=CONCATENATE(D18,".",E18,".",F18)
Copy that formula down to the bottom of the data.
Now, highlight the entire area of the spreadsheet which has any data in it, including that new column and the 3 columns containing your numbers.
Sort on the first, second and third column of where you stripped the numbers out to. Using my example above of the concatenate formula, you can see that I would sort on column D first, E second and F third.
Now, highlight the 3 columns (D, E and F), right click and choose HIDE. They're no longer visible, the concatenated data appears correct according to your number scheme and your data is sorted by outline numbering.
:D