Bubblesort在C#的通用列表中
作者:互联网
我正在使用C#中的通用列表,但是当我尝试使用冒泡排序方法对节点进行排序时遇到了问题.
namespace ConsoleApplication1
{
public class GenericList
{
private class Node
{
// Each node has a reference to the next node in the list.
public Node Next;
public int Data;
}
// The list is initially empty.
private Node head = null;
// Add a node at the beginning of the list with t as its data value.
public void AddNode(int t)
{
Node newNode = new Node();
newNode.Next = head;
newNode.Data = t;
head = newNode;
}
//list length
public int Size()
{
int listsize= 0;
Node current = head;
while (current != null)
{
listsize++;
current = current.Next;
}
return listsize;
}
//bubble sort
public void bubblesort()
{
int size = Size();
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;
}
}
}
head = current;
}
}
}
当我向列表中添加5个以上的节点时,Bubblesort方法将停止工作(不会正确对列表进行排序).
谁能帮我?
解决方法:
您需要澄清“停止工作”的意思…失败了吗?核心转储?列表排序不正确?
问题是您需要在i的每次迭代中(在j迭代之前)将电流重置回head 1.
如果您希望将最大值上移,则j应该从1增大到size-i(因为第一次通过后,最大数将位于顶部-无需再次检查).或者将最小值从大小1降到i.
嵌套循环方法的替代方法:您可以使用while / boolean / loop方法(在while之外,boolean表示是否对内部循环进行了更改).当数据已经按顺序排列时,这样做会有一点性能上的好处-它将在嵌套的for方法之前停止处理(即使已对数据进行排序,该方法也会运行最大次数).
标签:bubble-sort,generic-list,c 来源: https://codeday.me/bug/20191208/2092738.html