Sắp xếp không có ý nghĩa gì đối với mảng 2 chiều ... hay không?
Nhiệm vụ của bạn là lấy một lưới đầu vào và áp dụng thuật toán giống như bong bóng cho nó cho đến khi tất cả các giá trị trong lưới không giảm từ trái sang phải và từ trên xuống dưới dọc theo mỗi hàng và cột.
Các thuật toán hoạt động như sau:
- Mỗi lượt đi theo từng hàng, từ trên xuống dưới, so sánh / hoán đổi từng ô với hàng xóm bên phải và bên dưới.
- nếu ô lớn hơn chỉ một bên phải và bên dưới hàng xóm, hãy trao đổi với ô lớn hơn
- nếu ô lớn hơn cả bên phải và bên dưới hàng xóm, hãy trao đổi với hàng xóm nhỏ hơn
- nếu ô lớn hơn cả hàng xóm bên phải và bên dưới, có cùng giá trị, thì trao đổi với hàng xóm bên dưới.
- nếu ô không lớn hơn một trong hai bên phải và bên dưới hàng xóm, không làm gì cả
- Tiếp tục điều này cho đến khi không có giao dịch hoán đổi được thực hiện trong toàn bộ vượt qua. Điều này sẽ là khi mỗi hàng và cột theo thứ tự, từ trái sang phải và từ trên xuống dưới.
Thí dụ
4 2 1
3 3 5
7 2 1
Hàng đầu tiên của pass sẽ hoán đổi 4 và 2, sau đó 4 với 1.
2 1 4
3 3 5
7 2 1
Khi chúng ta có được 3 ở giữa, nó sẽ được hoán đổi với 2 bên dưới
2 1 4
3 2 5
7 3 1
Sau đó, 5 được hoán đổi với 1 dưới đây
2 1 4
3 2 1
7 3 5
Hàng cuối cùng của đường chuyền đầu tiên di chuyển 7 hướng sang phải
2 1 4
3 2 1
3 5 7
Sau đó, chúng tôi trở lại hàng đầu một lần nữa
1 2 1
3 2 4
3 5 7
Và tiếp tục theo từng hàng ...
1 2 1
2 3 4
3 5 7
... cho đến khi lưới được "sắp xếp"
1 1 2
2 3 4
3 5 7
Một vi dụ khac
3 1 1
1 1 1
1 8 9
trở thành
1 1 1
1 1 1
3 8 9
thay vì
1 1 1
1 1 3
1 8 9
bởi vì hoán đổi đi xuống được ưu tiên khi cả hàng xóm bên phải và bên dưới của một ô đều bằng nhau.
Một triển khai tham chiếu từng bước có thể được tìm thấy ở đây .
Các trường hợp thử nghiệm
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
trở thành
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
trở thành
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
Quy tắc
- Bạn có thể lấy lưới đầu vào ở bất kỳ định dạng thuận tiện nào
- Bạn có thể giả sử các giá trị lưới là tất cả các số nguyên không âm trong phạm vi 16 bit không dấu (0-65535).
- Bạn có thể cho rằng lưới là một hình chữ nhật hoàn hảo và không phải là một mảng lởm chởm. Lưới sẽ có ít nhất 2x2.
- Nếu bạn sử dụng một thuật toán sắp xếp khác, bạn phải cung cấp bằng chứng rằng nó sẽ luôn tạo ra thứ tự kết quả giống như thương hiệu sắp xếp bong bóng 2D cụ thể này, bất kể đầu vào là gì. Tôi hy vọng đây là một bằng chứng không tầm thường, vì vậy có lẽ bạn nên sử dụng thuật toán được mô tả.
Chúc bạn chơi golf vui vẻ!