c#从选择的#排序最接近最远



使用system.linq;

        int min = 1;
        int max = 100;
        int[] a = new int[10];
        Random randNum = new Random();
        for (int i = 0; i < a.Length; i++)
        {
            a[i] = randNum.Next(min, max);
        }
        int t;
        Console.WriteLine("array :");
        foreach (int aa in a)
            Console.Write(aa + " ");
        Console.Write("n");
        Console.WriteLine("Chosen number");
        {... }
            a = a.OrderBy(e => Math.Abs(e, b));
        foreach (var b in a) Console.Write("{0} ", x);
        {
            int b = int.Parse(Console.ReadLine());

            {
                for (int p = 0; p <= a.Length - 2; p++)
                {
                    for (int i = 0; i <= a.Length - 2; i++)
                    {
                        if (a[i]> a[i + 1])
                        {
                            t = a[i + 1];
                            a[i + 1] = a[i];
                            a[i] = t;
                        }
                    }
                }
                Console.Write("n");
                Console.WriteLine("n" + "+ :");
                foreach (int aa in a)
                    Console.Write(aa + " ");
                Console.Write("n");
            }

这是我尝试使用的代码。但是我想做的是选择一定的数字,并排序最接近所选号码。例如,数组中有7、5、3、2、9,假设我从数组中选择5。然后结果应该出现5 7 3(订单没关系(2 9.帮助我我很noob tnt

更改条件(a[i] > a[i + 1])以比较(a[i] and b之间的差异(和(a[i+1] and b)

您想按数组元素和所选编号之间的距离对数组进行排序。假设a是数字的数组,而b是所选的数字,

然后更换 for (;;) { ... }与此

using System.Linq;
a = a.OrderBy(e => (int) Math.Abs(e - b)).ToArray();
foreach (var x in a) Console.Write("{0} ", x);

好吧,我花了一些东西来了解您想要的类型,然后我看了您的代码,所以我决定我不会尝试为您自己的代码提供帮助,而是从头开始编写整个类型。

我最终使用了使用辅助数组但仅使用单个循环完成订单的方法:

void StrangeSort(int[] arr, int num)
{
    var index = Array.IndexOf(arr, num);
    if(index > -1)
    {
        var copy = new int[arr.Length];
        int copyIndex = 0, 
            down = index-1, 
            up = index+1;
        copy[copyIndex] = arr[index];
        while(down > -1 || up < arr.Length)
        {
            if(down > -1)
            {
                copyIndex++;
                copy[copyIndex] = arr[down];
                down--;
            }
            if(up < arr.Length)
            {
                copyIndex++;
                copy[copyIndex] = arr[up];
                up++;
            }
        }
        copy.CopyTo(arr, 0);
    }
}

您可以在Rextester上看到现场演示。

当然,总有linq:

var index = Array.IndexOf(arr, num); // arr being your array, num being the value selected
arr = arr.Select((v, i) => new {Value = v, Index = i})
        .OrderBy(e => Math.Abs(index - e.Index))
        .Select(e => e.Value)
        .ToArray();

相关内容

  • 没有找到相关文章

最新更新