2011-05-04 8 views
0

두 개의 정렬 된 배열이 있습니다. 추가 메모리를 사용하지 않고 두 배열을 병합해야합니다 (두 번째 배열은 병합을위한 공간이 더 깁니다). 출력은 두 번째 배열을 통해 반환되어야합니다.병합 정렬 된 배열

+0

나는 앞뒤로 Mergesort를 통과했으며 마지막 데이터는 두 번째 배열의 끝에 생성됩니다.이 경우 두 번째 배열 또는 결과 배열의 앞 부분에 빈 공간이있을 수 있습니다. 이보다 더 좋은 방법이 있니? – kc3

+2

그냥 배열의 점령 영역의 크기를 추가하고, 끝 부분 대신 배열의 해당 위치에서 시작하십시오. 예를 들어 A1에 10 개의 요소와 A2 8 개의 요소가 포함되어 있지만 A2에는 23 개의 요소에 대한 공간이 있다고 가정합니다. 요소 23에서 시작하여 뒤로 작업하는 대신 요소 18에서 시작하여 뒤로 작업하십시오. –

+0

이 링크 http://stackoverflow.com/questions/5958169/how-to-merge-two-sorted-arrays-into-a-sorted-array가 문제를 해결해야합니다. – Exception

답변

7

추가 공간이 두 번째 배열 끝에 있다고 가정하면 배열 끝에서 병합을 시작하기 만하면됩니다. i1i2 두 개의 인덱스를 사용하여 배열의 현재 위치를 가리키고 병합 배열의 현재 위치를 가리키는 인덱스 i을 사용하십시오.

  1. 초기화 i, i1

    i2는 각각의 배열의 마지막 항목을 가리 키도록.

  2. 으로 반복 (즉 i를 줄이고 더 큰 값을 보유하는 배열의 인덱스)에 a2[i]a1[i1]a2[i2]의 최대 쓰기 인덱스를 조정한다.

+0

좋은 메모 ... – Exception