C#按绝对值对数组进行排序与输入数组不符
使用输入数组按绝对值对数组排序不起作用,但用简单数组替换它会起作用。我不知道它为什么不起作用,我只是不知道出了什么问题 我需要这样的结果: 输入:C#按绝对值对数组进行排序与输入数组不符,c#,arrays,sorting,C#,Arrays,Sorting,使用输入数组按绝对值对数组排序不起作用,但用简单数组替换它会起作用。我不知道它为什么不起作用,我只是不知道出了什么问题 我需要这样的结果: 输入:-548-211 输出:1-24-58 static void Main() { var sampleInput = Console.ReadLine().Split().Select(int.Parse).ToArray(); int[] x = sampleInput; int n
-548-211
输出:1-24-58
static void Main()
{
var sampleInput = Console.ReadLine().Split().Select(int.Parse).ToArray();
int[] x = sampleInput;
int n = sampleInput.Length;
int[] output = new int[n];
string sOutput = string.Empty;
int start = 0;
int last = n - 1;
while (last >= start)
{
n--;
if (Math.Abs(x[start]) > Math.Abs(x[last]))
{
output[n] = x[start++];
}
else
{
output[n] = x[last--];
}
sOutput = output[n].ToString() + " " + sOutput;
}
Console.Write(sOutput);
}
为什么不呢
using System.Linq;
var sorted = new [] {-5, 4, 8, -2 , 1}.OrderBy(Math.Abs);
(当然,要获得一个数组,您可以在最后添加一个.ToArray()
)
要传递您想要的内容:
var sampleInput = Console.ReadLine().Split().Select(int.Parse).ToArray();
var sorted = sampleInput.OrderBy(Math.Abs);
这是你的解决方案
var array = Console.ReadLine().Split(' ').Select(s => int.Parse(s)).ToArray();
var sorted = array.OrderBy(Math.Abs);
foreach (int element in sorted)
{
Console.WriteLine(element);
}
亲切问候,,
同学?需要时添加
.ToArray()
。我需要能够输入我想要的任何数组,而不仅仅是一个固定数组。@AirWolf-。OrderBy()
在IEnumerable
上工作,所以您可以参加。当你真的(真的)需要就地排序时,你应该说清楚。我不确定我到底需要什么,这是问题的核心。@AirWolf当然你可以传递你想要的。。请参阅更新以获取帮助,请注意OP可能正在使用此代码-。在代码中编写排序算法通常比它的价值更麻烦。这是一个高等数学问题,不是真正的编程问题。存在着现有的、经过过度测试的代码,这些代码是由理解底层数学的所有细节的人编写的。除了学习它们是如何工作的,你还应该像对待黑匣子一样对待它。我会给Array.Sort()一个自定义比较器。或者使用zaitsman提供的LINQ方法,因为它较短且仍然清晰易懂。“我不确定我到底需要什么,这是问题的核心。”回答我们和你自己以下问题:1。您要排序什么?2.你想怎么分类?3.你为什么要这样分类特别是,如果您对类实例进行排序,通常有十几种方法可以剥特定猫科动物的皮,而且每种方法都可能在某个时候有效。您正在使用的GUI技术也起到了一定的作用。