Алгоритм сортировки списка строк (C#)
Я делаю это назначение для универа, и требуется, чтобы я использовал любой алгоритм сортировки для сортировки списка в алфавитном порядке (без учета регистра). В основном говорят, что если список содержит несколько строк, например, "a", "C", "b", "1" и "3", он будет сортировать его по "1", "3", "a", "b", "C" или "a" "b" "C" "1" "3"Я знаю, как сортировать массив целых чисел (код ниже, используя сортировку exchange), но как вместо этого использовать список строк? Как изменить код ниже, чтобы отсортировать список строк в алфавитном порядке, сохраняя при этом принципы сортировки обмена (в данном случае)?
Примечание: я не могу использовать List<string>.Sort()
или какой-то другой простой код.
// sort a vector of type int using exchange sort
public void ExchangeSort(int[] array)
{
int pass, i, n = array.Length;
int temp;
// make n-1 passes through the data
for (pass = 0; pass < n - 1; pass++)
{
// locate least of array[pass] ... array[n - 1]
// at array[pass]
for (i = pass + 1; i < n; i++)
{
if (array[i] < array[pass])
{
temp = array[pass];
array[pass] = array[i];
array[i] = temp;
}
}
}
}
1 ответ
Вам, вероятно, нужно будет сравнить строки char с char.
В псевдокоде:
for each I from 0 to (shorter string's length - 1):
if left[I] is a letter and right[I] isn't (or vice versa):
the string that has a letter at [I] is "less"
done
else:
("true" here means ignore case)
(you could also say `StringComparison.InvariantCultureIgnoreCase`, but eh)
result = String.Compare(left, I, right[I], I, 1, true)
if result < 0
left is "less"
else if result > 0
right is "less"
else
(both strings are equal so far)
next I
(if you're here, the strings are "equal" up to this point)
if both strings have the same length:
they're equal
else:
the longer string is "greater"