문제

나의 배열 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}.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top