如何移动数组元素

Nik*_*lin 1 .net arrays shift

我有一个n = 32项的数组,具有正值和负值.前n/2个元素为正,按值排序,第二个n/2元素为负,并按值排序.我想按值对整个数组进行排序,从最小的负值到最大正值,这意味着如果有32个元素,则前16个(n/2)个排序元素应包含原始数组的后16个元素的值排序数组的第二个16个元素应包含原始数组的前16个值.

假设的例子:

double[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, -16, -15, ..., -1};

double[] sorted = {-16, -15, ...., -1, 1, 2, ..., 16};
Run Code Online (Sandbox Code Playgroud)

有谁知道什么是移动元素从原始生成排序数组的最佳方法?

顺便说一下,这个数组绑定到另一个数组,该数组没有以相同的方式按大小排序的元素,并且必须以与原始相同的方式移位,因此数组不应按大小排序,必须移位.

Jon*_*eet 9

所以你想要一个第二个数组,原始内容但是在位置移位?要么明确地做:

double[] result = new double[32];
for (int i=0; i < 32; i++)
{
    result[(i+16)%32] = original[i];
}
Run Code Online (Sandbox Code Playgroud)

或使用Array.Copy两次:

double[] result = new double[32];
Array.Copy(original, 0, result, 16, 16);
Array.Copy(original, 16, result, 0, 16);
Run Code Online (Sandbox Code Playgroud)