bafromca - 1 year ago 69
C# Question

# Insertion Sort on an array of strings in C#

If I have an array of strings, such as

``````string[] names = {"John Doe", "Doe John", "Another Name", "Name Another"};
``````

How do I sort this array, using insertion sort?

Wikipedia has some examples: https://en.wikibooks.org/wiki/Algorithm_implementation/Sorting/Insertion_sort#C.23

``````static void InsertSort(IComparable[] array)
{
int i, j;

for (i = 1; i < array.Length; i++)
{
IComparable value = array[i];
j = i - 1;
while ((j >= 0) && (array[j].CompareTo(value) > 0))
{
array[j + 1] = array[j];
j--;
}
array[j + 1] = value;
}
}
``````

and

``````static void InsertSort<T>(IList<T> list) where T : IComparable<T>
{
int i, j;

for (i = 1; i < list.Count; i++)
{
T value = list[i];
j = i - 1;
while ((j >= 0) && (list[j].CompareTo(value) > 0))
{
list[j + 1] = list[j];
j--;
}
list[j + 1] = value;
}
}
``````

but it doesn't seem to work on my array of strings, unless I'm doing something wrong.

Would I not run

``````InsertSort(names); // like so?
``````

Works fine for me:

``````class Program
{
static void Main()
{
string[] names = { "John Doe", "Doe John", "Another Name", "Name Another" };
InsertSort(names);
foreach (var item in names)
{
Console.WriteLine(item);
}
}

static void InsertSort(IComparable[] array)
{
int i, j;

for (i = 1; i < array.Length; i++)
{
IComparable value = array[i];
j = i - 1;
while ((j >= 0) && (array[j].CompareTo(value) > 0))
{
array[j + 1] = array[j];
j--;
}
array[j + 1] = value;
}
}
}
``````

As expected it prints:

``````Another Name
Doe John
John Doe
Name Another
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download