通过在列表的开头或结尾放置项目之间交替订购商品的类型是什么?

时间:2015-02-07 12:25:03

标签: c# algorithm sorting

我有一个有序列表,从最大到最小。

{ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }

我想要一个像这样的列表

{ 10, 8, 6, 4, 2, 1, 3, 5, 7, 9 }

如果可以看到,新订单首先是每个奇数索引升序,然后是每个偶数索引递减。

这个想法是列表的每一半都具有大致相同的权重。 e.g

{ 10, 8, 6, 4, 2 } = 30
{ 1, 3, 5, 7, 9 } = 25

标题是我能用句子解释我所寻找的最好的标题,这就是我无法从谷歌那里找到答案的原因。

这是我的C#。我会欢迎任何关于我的尝试的评论,但我只是查看算法名称,如果它有一个。

var firstHalf = new List<string>();
var secondHalf = new List<string>();

for (int i = 0; i < originalList.Count; i++)
{
    if (i % 2 == 1)
    {
        firstHalf.Add(originalList[i]);
    }
    else
    {
        secondHalf.Add(originalList[i]);
    }
}

secondHalf.Reverse();

var finalList = new List<string>(firstHalf);
finalList.AddRange(secondHalf);

1 个答案:

答案 0 :(得分:0)

这可能不是最有效的方式,但它很简单:

var yourlist = originalList.Where(i => i % 2 == 0)
                           .OrderBy(i => i)
                           .Concat(originalList.Where(i => i % 2 != 0)
                                               .OrderByDescending(i => i))
                           .ToList();