문제
나의 배열 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};
사람이 무엇인지 알고 가장 좋은 방법을 이동하는 요소를 생성으로 정렬된 배열에서 원래?
이 배열의 방법으로 묶여 다른 배열을 가지고 있지 않은 요소를 정렬된 크기에 의하여 같은 방법으로는 이동과 같은 방법으로 원래 그렇게 배열할 수 없을 정렬 크기에 의하여, 그것은 이동.
해결책
그래서 당신은 원본의 내용이 있지만 위치에서 이동 한 두 번째 배열을 원하십니까? 명시 적으로 :
double[] result = new double[32];
for (int i=0; i < 32; i++)
{
result[(i+16)%32] = original[i];
}
또는 사용 Array.Copy
두 배:
double[] result = new double[32];
Array.Copy(original, 0, result, 16, 16);
Array.Copy(original, 16, result, 0, 16);
다른 팁
문제의 단단한 특성을 감안할 때 Array.Copy
:
int half = original.Length / 2;
Array.Copy(original, 0, sorted, half, half);
Array.Copy(original, half, sorted, 0, half);
LINQ는 어떻습니까 :
int half = original.Length/2;
var sorted = original.Skip(half).Concat(original.Take(half)).ToArray();
시도 했습니까?
Array.Sort(original);
요소 0 및 요소 16, 1 및 17, 2 및 18에 스왑을 수행하십시오. 등.
같은 크기의 다른 배열에 포함 된 값을 기준으로 하나의 배열을 정렬 하시겠습니까? 그렇다면 다음을 사용하십시오.
Array.Sort(keys, values);
문서는 다음과 같습니다 Array.Sort (배열 키, 어레이 항목)
존 스키트 및 Marc Gravell♦'s 답변을 제공하는 올바른 솔루션,하지만 당신이 원하지 않는 경우에 할당 여분의 배열을 할 수 있습니다:
a)를 해결하는 특정한 문제(동 2 절반을 하기 전에 제 1 회 반)장소:
private void Rotate1(double[] toRotate ) {
int startOf2nd = toRotate.Length / 2;
for (int i=0; i < toRotate.Length/2; i++) {
double temp = toRotate [i];
toRotate [i] = toRotate [i + startOf2nd];
toRotate [i + startOf2nd] = temp;
}
}
이 코드는 다룰 수 없는 배열의 홀수 항목입니다.
b)적용할 수 있습니다 벡터 알고리즘을 이동하는 알고 존 벤틀리의'프로그래밍 진주':
private void Rotate2(double[] toRotate, int index ) {
Array.Reverse(toRotate, 0, index);
Array.Reverse(toRotate, index, toRotate.Length-index);
Array.Reverse(toRotate, 0, toRotate.Length);
}
에서 당신의 예 지수는 16.이 코드를 처리하는 홀수의 항목 및 인덱스되고 있지 않습니다.를 사용하여 예를 사용한 것과 유사한 책에서 toRotate={0,1,2,3,4,5,6,7}및 index=3 Rotate2 생산 것{3,4,5,6,7,0,1,2}.