When you have an array of strings, the comparison that sorting would use would be based on a character-by-character examination of the string content - so you need to convert the string values to their equivalent numeric values before you can order them. Unfortunately, there is no built in way to do that.
One solution would be to create a collection of the number names and use Linq:
private List<string> names = new List<string>() { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
...
string[] unsorted = new string[] { "eight", "four", "three", "seven", "one" };
string[] sorted = unsorted.OrderBy(s => names.IndexOf(s)).ToArray();
To get the values in descending order, you'd either reverse the order in the initial array, or use the Linq Reverse method.
But...This would be a lot of work to use for a significant range of numbers!
[edit]Typos[/edit]