如何使用strand sort编写方法

时间:2014-03-16 17:59:46

标签: c# console-application mergesort

我承认,这是我的项目的功课,我来到这里因为我不知道该怎么做。

我必须做什么

编写一个方法editUsingStrands(),它返回增长的整数字段。返回的字段应与指定字段中存储的大小相同且值相同。该算法不应超过O(n3)复杂度的增长。

我使用LIST完成了这个,但我发现是不允许的,所以不是任何复杂的函数,如Sort,RemoveAt,Count ...(如果所有都是复杂的函数,dunno,但我知道它们是不允许的)。

有人可以帮助我重新创建它而不使用LIST和那些功能吗?

非常感谢!

我的代码

static int[] editUsingStrands(int[] field)
    {
        List<int> organizedField = new List<int>();
        List<int> xField = new List<int>(field);

        while(xField.Count > 0)
        {
            List<int> sublist = new List<int>();

            sublist.Add(xField[0]);
            xField.RemoveAt(0);

            for(int i=0; i< xField.Count; i++)
            {
                if(xField[i] > sublist[sublist.Count-1])
                {
                    sublist.Add(xField[i]);
                    xField.RemoveAt(i);
                    i--;
                }
            }

            organizedField = new List<int>(mergeTogether(organizedField.ToArray(), sublist.ToArray()));
        }

        return organizedField.ToArray();

}

static int[] mergeTogether(int[] field1, int[] field2)
    {
        List<int> organizedMergedField = new List<int>();
        int counter1 = 0, counter2 = 0;

        while ((counter1 + counter2) < (field1.Length + field.Length))
        {
            if (field1.Length > counter1)
            {
                if (field2.Length > counter2)
                {
                    if (field1[counter1] < field2[counter2])
                    {
                        organizedMergedField.Add(field1[counter1]);
                        counter1++;
                    }
                    else
                    {
                        organizedMergedField.Add(field2[counter2]);
                        counter2++;
                    }
                }
                else
                {
                    organizedMergedField.Add(field1[counter1]);
                    counter1++;
                }
            }
            else
            {
                organizedMergedField.Add(field2[counter2]);
                counter2++;
            }
        }

        return organizedMergedField.ToArray();
    }

0 个答案:

没有答案
相关问题