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