C#从所选#最近到最远的排序

时间:2018-03-29 04:35:07

标签: c# arrays sorting compare

使用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.帮帮我PLZ我非常诺布TnT

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您希望按数组元素与所选数字之间的距离对数组进行排序。假设<div *ngFor="let i of data> <p>{{i | async}}</p> </div> 是一个数字数组,a是所选数字,

然后替换 b使用此

for (;;) { ... }

答案 2 :(得分:0)

好吧,我花了一些时间来理解你想要什么样的那种,然后我看了你的代码,在我看来你把自己变成了一个过于复杂的方法,所以我&#39;我决定不打算尝试用你自己的代码帮助你,但是从头开始编写整个类。

我最终得到了一个使用辅助数组但只使用一个循环来完成订单的方法:

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

You can see a live demo on rextester.

当然,总有一个问题:

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