Sắp xếp lại mảng 2 chiều để tăng trên hàng nhưng giảm dần trên cột (hoặc ngược lại)

Sắp xếp mảng 2 chiều tăng dần hoặc giảm dần thì em gán thành mảng 1 chiều rồi sắp xếp, nhưng vừa tăng vừa giảm thế này thì làm sao ạ :frowning:

Vẫn đưa về 1 mảng và sắp xếp, sau đó “phân phối” cho từng ô cho hợp lý dựa vào “góc nhỏ/ lớn nhất”. :smiling_imp:. “Phân phối” theo đường chéo hướng vuông góc (chưa chắc là vuông).
VD:
Dòng tăng - Cột giảm
=>

  • Góc nhỏ nhất: trái - dưới.
  • Góc lớn nhất: phải - trên.
  • Đường chéo là phải - dưới -> trái - trên (1) hoặc trái - trên -> phải - dưới (2).

Nhập:

13 68 11 45
72 25 52 35
10 52 91 46

Thành 1 mảng và sắp xếp:

10 11 13 25 35 45 46 52 52 68 72 91 

“Phân phối” từ “góc nhỏ nhất”: trái - dưới. Theo đường chéo (1).

Giá trị        Chỉ số
45 52 72 91    05 08 10 11
13 35 52 68    02 04 07 09
10 11 25 46    00 01 03 06

Hoặc hướng chéo ngược lại (2):

Giá trị        Chỉ số
25 46 68 91    03 06 09 11
11 35 52 72    01 04 07 10
10 13 45 52    00 02 05 08

Lý thuyết và kết quả là vậy, bạn tự “dịch” sang mã.

6 Likes

Suy nghĩ thêm chút nữa thì mỗi hàng trong ma trận có thể chạy 1 for :smiley: với O(mn) mem.

O(1) mem mới là chua :smiley:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?