generateSeedingOrder static method

List<int> generateSeedingOrder(
  1. int size
)

Generates the standard tournament bracket seeding position order for a given power-of-2 size.

For example:

  • size = 2: 1, 2
  • size = 4: 1, 4, 3, 2
  • size = 8: 1, 8, 5, 4, 3, 6, 7, 2
  • size = 16: 1, 16, 9, 8, 5, 12, 13, 4, 3, 14, 11, 6, 7, 10, 15, 2

Implementation

static List<int> generateSeedingOrder(int size) {
  if (size <= 0) return [];
  // Ensure size is a power of 2
  int p = 1;
  while (p < size) {
    p *= 2;
  }

  List<int> order = [1];
  while (order.length < p) {
    final nextLength = order.length * 2;
    final nextOrder = List<int>.filled(nextLength, 0);
    final sum = nextLength + 1;

    for (int i = 0; i < order.length; i++) {
      final x = order[i];
      if (i % 2 == 0) {
        nextOrder[i * 2] = x;
        nextOrder[i * 2 + 1] = sum - x;
      } else {
        nextOrder[i * 2] = sum - x;
        nextOrder[i * 2 + 1] = x;
      }
    }
    order = nextOrder;
  }
  return order;
}