Да ладно, ребята .. ослабьте его .. это поколение Google.
кстати ..
http://www.google.co.uk/search?q=C%23+bubble+sort
.. приведу несколько отличных примеров.
Теперь о том, что на самом деле не так с вашим кодом:
Этот код (сверху)
Node current = head;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - 1; j++)
{
if (current.Data > current.Next.Data && current.Next!=null)
{
int temp = current.Data;
current.Data = current.Next.Data;
current.Next.Data = temp;
}
}
}
точно так же, как сказать:
Node current = head;
if (current.Data > current.Next.Data && current.Next!=null)
{
int temp = current.Data;
current.Data = current.Next.Data;
current.Next.Data = temp;
}
Вы не изменяете «текущий» узел, т. Е. Вы всегда сортируете первый и второй элемент в вашем списке.
Я не дам вам полного решения, для этого и нужна домашняя работа. В цикле убедитесь, что ваш текущий всегда является 'j' -ым элементом в вашем списке, когда он начинается, это внутренний цикл, и вы получите правильные результаты.
Также вы получаете немного неверный бит подкачки, вы должны поменять местами узлы, а не только данные. то есть поле Next узла и то, что указывает на текущий узел, необходимо обновить. Это должно принести вам больше очков, чем просто обмен данными.
Также несколько советов по отладке: добавьте функцию Print () следующим образом:
public void Print()
{
Node current = head;
Console.Write("List: ");
while (current != null)
{
Console.Write("{0} ", current.Data);
current = current.Next;
}
Console.WriteLine("");
}
И вызовите это в своем цикле сортировки, это поможет вам понять, как меняется список между каждой итерацией ... это поможет вам понять, где может быть проблема.
List: 3 1 50 2 5 4
List: 3 1 50 2 5 4
List: 1 3 50 2 5 4
List: 1 3 50 2 5 4
List: 1 3 2 50 5 4
List: 1 3 2 5 50 4
List: 1 3 2 5 4 50
List: 1 2 3 5 4 50
List: 1 2 3 5 4 50
List: 1 2 3 4 5 50
Oh! человек .. каждый раз, когда я читаю код, я нахожу что-то новое, что не так! ...
if (current.Data > current.Next.Data && current.Next!=null)
должно быть
if (current != null && current.Next!=null && current.Data > current.Next.Data)
Ваш код не дает сбоя, так как в данный момент он ничего не делает.
Надеюсь, это поможет.