diff --git a/challenges/sorting-algorithms/solutions/dart/insertion-sort/README.md b/challenges/sorting-algorithms/solutions/dart/insertion-sort/README.md new file mode 100644 index 0000000..c094847 --- /dev/null +++ b/challenges/sorting-algorithms/solutions/dart/insertion-sort/README.md @@ -0,0 +1,7 @@ +# sorting-algorithms/dart/insertion-sort + +Created by [@Divlo](https://github.com/Divlo) on 29 June 2021. + +| Algorithm | Best Case | Average Case | Worst Case | +| ----------------------------------------------------------- | ----------- | ------------ | ----------- | +| [Insertion sort](https://wikipedia.org/wiki/Insertion_sort) | O(n) | O(n²) | O(n²) | diff --git a/challenges/sorting-algorithms/solutions/dart/insertion-sort/solution.dart b/challenges/sorting-algorithms/solutions/dart/insertion-sort/solution.dart new file mode 100644 index 0000000..3fd497f --- /dev/null +++ b/challenges/sorting-algorithms/solutions/dart/insertion-sort/solution.dart @@ -0,0 +1,32 @@ +import 'dart:io'; + +void main() { + int length = int.parse(readLineSync()); + List numbers = []; + for (int indexInput = 0; indexInput < length; indexInput++) { + numbers.add(int.parse(readLineSync())); + } + List sortedNumbers = insertionSort(numbers); + for (int index = 0; index < length; index++) { + print(sortedNumbers[index]); + } +} + +List insertionSort(Iterable numbersInput) { + var numbers = [...numbersInput]; + for (var index1 = 0; index1 < numbers.length; index1++) { + var current = numbers[index1]; + var index2 = index1 - 1; + while (index2 >= 0 && numbers[index2] > current) { + numbers[index2 + 1] = numbers[index2]; + index2 -= 1; + } + numbers[index2 + 1] = current; + } + return numbers; +} + +String readLineSync() { + String? string = stdin.readLineSync(); + return string == null ? '' : string; +}