.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Collections.Generic;
					
public class Program
{
	public static void Main()
	{
		var source = new string[] {"A","B","C","111","11","123","1","42","5"};
		
		var sorted = source.OrderBy(x => x, new Comparer());
		
		Console.WriteLine(string.Join("\n", sorted));
	}
	
	public class Comparer : IComparer<string>
	{
		public int Compare(string a, string b) 
		{
			int ia = 0;
			int ib = 0;
			var aIsInt = int.TryParse(a,out ia);
			var bIsInt = int.TryParse(b,out ib);
			if (aIsInt == bIsInt)
			{
				if (aIsInt)
				{
					return ia.CompareTo(ib);
				}
				else
				{
					return a.CompareTo(b);
				}
			}
			return aIsInt ? -1 : 1;
		}
	}
}
;