首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#基数排序在LinkedList中的实现

C#基数排序在LinkedList中的实现
EN

Stack Overflow用户
提问于 2020-04-27 22:41:55
回答 1查看 458关注 0票数 0

我有一个任务是做一个链表类的基数排序算法,我有一个对象"Info",它有int Year和double Price,我需要使用基数排序按年对链表进行排序。

代码语言:javascript
复制
    class Info
    {
        public int Year { get; set; }
        public double Price { get; set; }
        public Info() { }
        public Info(int y, double p)
        {
            Year = y;
            Price = p;
        }
    }
代码语言:javascript
复制
    class Node
    {
        public Info Data { get; set; }
        public Node Next { get; set; }
        public Node(Info data, Node adress)
        {
            Data = data;
            Next = adress;
        }
    }
代码语言:javascript
复制
    class LinkedList
    {
        private Node First;
        private Node Last;
        private Node Current;
        public LinkedList()
        {
            First = null;
            Last = null;
            Current = null;
        }
     }

我对这个site中的整数采用了基数排序算法。问题是,我不知道如何修改它来与我的链接类一起工作。

代码语言:javascript
复制
        static void Sort(int[] arr)
        {
            int temp = 0;
            int i, j;
            int[] tmp = new int[arr.Length];
            for (int shift = 31; shift > -1; --shift)
            {
                j = 0;
                for (i = 0; i < arr.Length; ++i)
                {
                    bool move = (arr[i] << shift) >= 0;
                    if (shift == 0 ? !move : move)
                        arr[i - j] = arr[i];
                    else
                        tmp[j++] = arr[i];
                }
                Array.Copy(tmp, 0, arr, arr.Length - j, j);
            }
        }

如何使它与我的链接类一起工作?

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 15:25:22

基于该代码,arr和tmp需要是链表。这种方法的一个问题是,移动节点需要跟踪以前的节点才能移动节点。伪头节点可用于提供在第一个数据节点之前的节点,或者在将节点移动到列表的开头时的特殊情况处理。一种替代方案是使用两个指向临时列表的节点的指针(引用),一个是位== 0,一个是位== 1,然后将两个临时列表连接成单个列表。请注意,此方法需要32次传递。如果基数排序是基于一个字节而不是一个位,那么它可以减少到4次,但对于256个列表,需要256个指向节点的指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61461450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档