编程语言
首页 > 编程语言> > Bubblesort在C#的通用列表中

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