public static void Main()
var ordered = arr.Select(str => {
string[] parts = SplitIntoPrefixNumberSuffix(str);
int number = int.Parse(parts[1]);
return new { str, parts, number };
.OrderBy(x => x.number).ThenBy(x => x.parts[2]).ThenBy(x => x.parts[0])
Console.WriteLine("sorted array: ");
foreach (var s in ordered)
Console.WriteLine("{0}", s);
public static string[] SplitIntoPrefixNumberSuffix(string str)
char[] numChar = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
var numLoc = str.IndexOfAny(numChar);
var prefix = str.Substring(0, numLoc);
var suffix = str.Substring(numLoc + nums.Count());
return new string[] { prefix, nums, suffix };