Как создать универсальную пузырьковую сортировку в C#
В настоящее время я работаю над созданием собственной общей сортировки по пузырькам, которая может легко сортировать строки, int. Ниже приведен мой код для нормальной сортировки пузырьков. Можете ли вы помочь мне, как создать общий метод этого?
public static void BubbleSorting()
{
int Swap;
for (int outer = Length; outer >= 1; outer--)
{
for (int inner = 0; inner < outer - 1; inner++)
{
if (array[inner] > array[inner + 1])
{
Swap = array[inner];
array[inner] = array[inner + 1];
array[inner + 1] = Swap;
}
}
Console.WriteLine();
Display();
}
}
3 ответа
public static void BubbleSort<T>(T[] array, IComparer<T> comparer) {
if (comparer == null) comparer = Comparer<T>.Default;
T Swap;
// etc..
}
Просто используйте IComparable
если элементы в массиве реализуют IComparable
Вы можете заменить
array[inner] > array[inner + 1]
с
array[inner].CompareTo(array[inner + 1]) > 0
так что в конечном итоге
public static void BubbleSorting<T>(T[] array) where T : Icomparable
{
for (int outer = Length; outer >= 1; outer--)
{
for (int inner = 0; inner < outer - 1; inner++)
{
if (array[inner].CompareTo(array[inner + 1]) > 0)
{
T Swap = array[inner];
array[inner] = array[inner + 1];
array[inner + 1] = Swap;
}
}
}
}
public static void BubbleSort<T>(T[] list)
{
BubbleSort<T>(list, Comparer<T>.Default);
}
public static void BubbleSort<T>(T[] list, IComparer<T> comparer)
{
bool KeepIterating = true;
while (KeepIterating)
{
KeepIterating = false;
for (int i = 0; i < list.Length-1; i++)
{
T x = list[i];
T y = list[i + 1];
if (comparer.Compare(x,y)>0)
{
list[i] = y;
list[i + 1] = x;
KeepIterating = true;
for (int j = 0; j < list.Length; j++)
{
Console.WriteLine("{0} {1}",j,list[j]);
}
}
}
}
}