*<Null safety>*
void insertionSort <E>(List<E> elements, {int compare(E, E), int start: 0, int? end})
void insertionSort<E>(List<E> elements, {int Function(E, E)? compare, int start = 0, int? end}) { // If the same method could have both positional and named optional // parameters, this should be (list, [start, end], {compare}). compare ??= defaultCompare; end ??= elements.length; for (var pos = start + 1; pos < end; pos++) { var min = start; var max = pos; var element = elements[pos]; while (min < max) { var mid = min + ((max - min) >> 1); var comparison = compare(element, elements[mid]); if (comparison < 0) { max = mid; } else { min = mid + 1; } } elements.setRange(min + 1, pos + 1, elements, min); elements[min] = element; } }