我有一个有序列表,从最大到最小。
{ 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);
答案 0 :(得分:0)
这可能不是最有效的方式,但它很简单:
var yourlist = originalList.Where(i => i % 2 == 0)
.OrderBy(i => i)
.Concat(originalList.Where(i => i % 2 != 0)
.OrderByDescending(i => i))
.ToList();