C# 什么样的排序通过在列表的开头或结尾交替放置项目来排序项目?

C# 什么样的排序通过在列表的开头或结尾交替放置项目来排序项目?,c#,algorithm,sorting,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 这个标题是我能用一句话解释的最好的,这就是为什么我很难从谷歌找到答案 这是我的密码。我

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

{ 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
这个标题是我能用一句话解释的最好的,这就是为什么我很难从谷歌找到答案

这是我的密码。我欢迎对我的尝试发表任何评论,但我只关注算法名称(如果有)

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);
var firstHalf=新列表();
var secondHalf=新列表();
for(int i=0;i
这可能不是最有效的方法,但很简单:

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

我不确定这是否是您正在做的,但它类似于我发布的分区问题,我的解决方案是为了帮助您理解列表是如何排序的。我要的是算法的名称,不是另一个解决方案。无论如何,谢谢你。