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