정렬은 2 차원 배열에 적합하지 않습니다.
당신의 임무는 입력 그리드를 취해 모든 행과 열을 따라 그리드의 모든 값이 왼쪽에서 오른쪽으로, 위에서 아래로 줄어들지 않을 때까지 버블 정렬 알고리즘을 적용하는 것입니다.
알고리즘은 다음과 같이 작동합니다.
- 각 패스는 각 셀을 오른쪽 및 아래의 이웃과 비교 / 스와핑하여 행 단위로 진행합니다.
- 셀이 오른쪽 및 아래 이웃 중 하나보다 큰 경우보다 큰 셀로 교체하십시오.
- 셀이 오른쪽 및 아래쪽 이웃보다 큰 경우 더 작은 이웃과 교환하십시오.
- 셀이 같은 값인 오른쪽 및 아래쪽 이웃보다 큰 경우 아래 이웃과 교환하십시오.
- 셀이 오른쪽 아래 이웃보다 크지 않으면 아무 것도 수행하지 마십시오.
- 전체 패스에서 교환이 이루어지지 않을 때까지이 작업을 계속하십시오. 이것은 모든 행과 열이 순서대로 왼쪽에서 오른쪽으로 그리고 위에서 아래로있을 때입니다.
예
4 2 1
3 3 5
7 2 1
패스의 첫 번째 행은 4와 2를 바꾼 다음 4를 1과 바꿉니다.
2 1 4
3 3 5
7 2 1
가운데 3을 얻으면 아래 2와 바뀝니다.
2 1 4
3 2 5
7 3 1
그런 다음 5가 아래 1과 바뀝니다.
2 1 4
3 2 1
7 3 5
첫 번째 패스의 마지막 행은 7을 오른쪽으로 끝까지 이동합니다
2 1 4
3 2 1
3 5 7
그런 다음 다시 맨 위 줄로 돌아갑니다.
1 2 1
3 2 4
3 5 7
그리고 계속해서 계속 ...
1 2 1
2 3 4
3 5 7
... 그리드가 "정렬"될 때까지
1 1 2
2 3 4
3 5 7
또 다른 예
3 1 1
1 1 1
1 8 9
된다
1 1 1
1 1 1
3 8 9
오히려
1 1 1
1 1 3
1 8 9
셀의 오른쪽 및 아래쪽 이웃이 모두 같으면 하향 스왑이 우선 순위를 갖기 때문입니다.
단계별 참조 구현 은 여기에서 찾을 수 있습니다 .
테스트 사례
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
된다
0 0 1 1 2 2 3 6
2 2 3 3 6 7 8 8
3 3 5 7 8 9 9 9
2 1 2 7 8 2 1 0
2 2 2 2 3 2 1 0
1 2 3 4 5 4 3 2
9 8 7 6 5 4 3 6
6 5 4 3 2 2 1 0
된다
0 0 0 1 1 1 2 2
1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3
3 4 4 4 4 5 6 6
5 5 6 7 7 8 8 9
규칙
- 편리한 형식으로 입력 그리드를 사용할 수 있습니다
- 격자 값이 부호없는 16 비트 범위 (0-65535)의 음이 아닌 정수라고 가정 할 수 있습니다.
- 그리드가 딱딱한 사각형이 아니라 딱딱한 사각형이라고 가정 할 수 있습니다. 그리드는 2x2 이상입니다.
- 다른 정렬 알고리즘을 사용 하는 경우 입력이 무엇이든 관계없이이 특정 브랜드의 2D 버블 정렬과 항상 동일한 결과 순서를 생성 한다는 증거를 제공해야합니다 . 나는 이것이 사소한 증거가 될 것으로 기대하므로 설명 된 알고리즘을 사용하는 것이 좋습니다.
행복한 골프!