【问题标题】:C# Sort an array by absolute value does not work as intended with a input arrayC# 按绝对值对数组进行排序不能按预期使用输入数组
【发布时间】:2019-10-27 22:23:59
【问题描述】:

使用输入数组按绝对值对数组进行排序无法正常工作,但用简单数组替换它是可行的。我不知道为什么它不起作用,我只是看不出有什么问题。

我需要这样的结果:

输入:-5 4 8 -2 1

输出:1 -2 4 -5 8

    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);

    }

【问题讨论】:

  • 对于那些协助的人,请注意 OP 可能使用此代码 -c-sharpcorner.com/code/1537/…
  • 在代码中编写排序算法通常更麻烦,而不值得。这是一个高等数学问题,而不是真正的编程问题。现有的、经过过度测试的代码是由了解底层数学所有细节的人编写的。除了了解它们的工作原理之外,您还应该将其视为黑匣子。我只想给 Array.Sort() 一个自定义比较器。或者使用 zaitsman 提供的 LINQ 方法,因为它更短且仍然清晰易懂。
  • “我不确定我到底需要什么,这是问题的核心。”回答我们和您自己这些问题: 1. 您想要排序什么? 2.你想怎么排序? 3. 为什么要这样排序? |特别是如果您对类实例进行分类,通常有十几种方法可以给特定的猫科动物蒙皮——而且每种方法都可能在某个时候有效。您使用的 GUI 技术也会发挥作用。

标签: c# arrays sorting


【解决方案1】:

为什么不

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);

【讨论】:

  • 需要时添加.ToArray()
  • 我需要能够输入我想要的任何数组,而不仅仅是一个固定的数组。
  • @AirWolf - .OrderBy()IEnumerable<> 上工作,所以你被覆盖了。当你真的(真的)需要就地排序时,你应该清楚地说明这一点。
  • 我不确定我到底需要什么,这是问题的核心。
  • @AirWolf 当然你可以通过你想要的.. 查看更新
【解决方案2】:

这是您的解决方案。

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);
            }

亲切的问候, 同学?

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多