Mã:
void spiralSort(IntArr2d& a, size_t layer){ if (layer >= a.size()/2 || layer >= a[0].size()/2) return; size_t i = layer, j = layer; size_t min_i, min_j; while (true) { findMinIndex(a, i, j, layer, min_i, min_j); exch(a, i, j, min_i, min_j); cwIncrement(a, i, j, layer); if (i == layer && j == layer) break; //avoid loop second time } spiralSort(a, ++layer);}
vd với mảng a
Mã:
{ 5, 8, 3, 6,15},{20,17, 2, 9,14},{ 4,18,11, 7,12},{10, 1,16,19,13}
thì hàm cwIncrement có tác dụng tăng i, j xoắn ốc theo chiều kim đồng hồ, với layer cho trước
Mã:
size_t layer = 0;size_t i = layer, j = layer;while (true) { std::cout << a[i][j] << " "; cwIncrement(a, i, j, layer); if (i == layer && j == layer) break; //avoid loop second time}
nếu thay layer = 0 sẽ in ra kết quả 5 8 3 6 15 14 12 13 19 16 1 10 4 20
nếu thay layer = 1 thì sẽ ra kết quả 17 2 9 7 11 18
nếu thay layer = 1 và j = layer + 2 thì sẽ in ra 9 7 11 18
nếu thay layer = 0 và i = layer + 3 thì sẽ in ra 10 4 20
còn hàm findMinIndex thì sẽ tìm index min_i, min_j của phần tử nhỏ nhất trong mảng, tìm theo kiểu tìm trên đường viền xoắn ốc trước, rồi tìm bên trong đường viền (nếu có phần tử bên trong)
vd findMinIndex(a, 0, 0, 0, min_i, min_j) sẽ cho a[min_i][min_j] = 1
vd findMinIndex(a, 1, 1, 1, min_i, min_j) sẽ cho a[min_i][min_j] = 2
vd findMinIndex(a, 1, 3, 1, min_i, min_j) sẽ cho a[min_i][min_j] = 7
vd findMinIndex(a, 3, 0, 0, min_i, min_j) sẽ cho a[min_i][min_j] = 2
hàm exch thì hoán đổi giá trị của a[i][j] và a[min_i][min_j]
(sắp xếp theo selection sort)
Pallet nhựa Lâm Đồng giải pháp hoàn hảo cho nhà kho Pallet nhựa Lâm Đồng là một giải pháp đa năng và hiệu quả trong việc vận chuyển và lưu trữ hàng hóa. Trong đó, pallet nhựa Lâm Đồng không chỉ đáp...
Pallet nhựa Lâm Đồng giải pháp...