diff options
| author | Egor Tensin <egor@tensin.name> | 2026-06-18 16:44:44 +0200 |
|---|---|---|
| committer | Egor Tensin <egor@tensin.name> | 2026-06-18 16:44:44 +0200 |
| commit | 8a82485e2a1d235af1b66c0ddd9c7719b08de4d6 (patch) | |
| tree | b12d93da8ee1e965afc084c861a82ff0238ef288 /algorithms | |
| parent | workflows/ci: add Black formatting job (diff) | |
| download | sorting-algorithms-8a82485e2a1d235af1b66c0ddd9c7719b08de4d6.tar.gz sorting-algorithms-8a82485e2a1d235af1b66c0ddd9c7719b08de4d6.zip | |
workflows/ci: use default Black settings
Diffstat (limited to 'algorithms')
| -rw-r--r-- | algorithms/impl/__init__.py | 4 | ||||
| -rw-r--r-- | algorithms/impl/bubble_sort.py | 6 | ||||
| -rw-r--r-- | algorithms/impl/heapsort.py | 4 | ||||
| -rw-r--r-- | algorithms/impl/insertion_sort.py | 4 | ||||
| -rw-r--r-- | algorithms/impl/median.py | 6 | ||||
| -rw-r--r-- | algorithms/impl/merge_sort.py | 4 | ||||
| -rw-r--r-- | algorithms/impl/quicksort.py | 12 | ||||
| -rw-r--r-- | algorithms/impl/selection_sort.py | 4 | ||||
| -rw-r--r-- | algorithms/input_kind.py | 8 | ||||
| -rw-r--r-- | algorithms/params.py | 30 | ||||
| -rw-r--r-- | algorithms/plotter.py | 2 | ||||
| -rwxr-xr-x | algorithms/scripts/plot.py | 62 | ||||
| -rwxr-xr-x | algorithms/scripts/test.py | 38 |
13 files changed, 92 insertions, 92 deletions
diff --git a/algorithms/impl/__init__.py b/algorithms/impl/__init__.py index f2d5aaf..ebc1ab2 100644 --- a/algorithms/impl/__init__.py +++ b/algorithms/impl/__init__.py @@ -9,7 +9,7 @@ from pkgutil import iter_modules from .. import algorithm -_ALGORITHMS_NAME = '_ALGORITHMS' +_ALGORITHMS_NAME = "_ALGORITHMS" def refresh_algorithms(): @@ -18,7 +18,7 @@ def refresh_algorithms(): for _, module_name, is_pkg in iter_modules([os.path.dirname(__file__)]): if is_pkg: continue - module = import_module('.' + module_name, __package__) + module = import_module("." + module_name, __package__) if hasattr(module, _ALGORITHMS_NAME): module_algorithms = getattr(module, _ALGORITHMS_NAME) for descr in module_algorithms: diff --git a/algorithms/impl/bubble_sort.py b/algorithms/impl/bubble_sort.py index 14f5386..ac9621f 100644 --- a/algorithms/impl/bubble_sort.py +++ b/algorithms/impl/bubble_sort.py @@ -35,9 +35,9 @@ def bubble_sort_optimized(xs): _ALGORITHMS = [ - SortingAlgorithm('bubble_sort', 'Bubble sort', bubble_sort), + SortingAlgorithm("bubble_sort", "Bubble sort", bubble_sort), SortingAlgorithm( - 'bubble_sort_optimized', 'Bubble sort (optimized)', bubble_sort_optimized + "bubble_sort_optimized", "Bubble sort (optimized)", bubble_sort_optimized ), ] @@ -54,5 +54,5 @@ def main(args=None): print(bubble_sort_optimized(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/heapsort.py b/algorithms/impl/heapsort.py index 81bea20..4299c91 100644 --- a/algorithms/impl/heapsort.py +++ b/algorithms/impl/heapsort.py @@ -63,7 +63,7 @@ def _siftdown(xs, start, end): _ALGORITHMS = [ - SortingAlgorithm('heapsort', 'Heapsort', heapsort), + SortingAlgorithm("heapsort", "Heapsort", heapsort), ] @@ -78,5 +78,5 @@ def main(args=None): print(heapsort(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/insertion_sort.py b/algorithms/impl/insertion_sort.py index 13f16a0..f87e62e 100644 --- a/algorithms/impl/insertion_sort.py +++ b/algorithms/impl/insertion_sort.py @@ -18,7 +18,7 @@ def insertion_sort(xs): _ALGORITHMS = [ - SortingAlgorithm('insertion_sort', 'Insertion sort', insertion_sort), + SortingAlgorithm("insertion_sort", "Insertion sort", insertion_sort), ] @@ -33,5 +33,5 @@ def main(args=None): print(insertion_sort(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/median.py b/algorithms/impl/median.py index 7b75219..2fcc4a1 100644 --- a/algorithms/impl/median.py +++ b/algorithms/impl/median.py @@ -47,9 +47,9 @@ def calc_median_sorting(xs): _ALGORITHMS = [ Algorithm( - 'median_sorting', 'Median value (using explicit sorting)', calc_median_sorting + "median_sorting", "Median value (using explicit sorting)", calc_median_sorting ), - Algorithm('median_heaps', 'Median value (using heaps)', calc_median_heaps), + Algorithm("median_heaps", "Median value (using heaps)", calc_median_heaps), ] @@ -65,5 +65,5 @@ def main(args=None): print(calc_median_heaps(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/merge_sort.py b/algorithms/impl/merge_sort.py index fecdf78..363cc85 100644 --- a/algorithms/impl/merge_sort.py +++ b/algorithms/impl/merge_sort.py @@ -33,7 +33,7 @@ def merge_sort(xs): _ALGORITHMS = [ - SortingAlgorithm('merge_sort', 'Merge sort', merge_sort), + SortingAlgorithm("merge_sort", "Merge sort", merge_sort), ] @@ -48,5 +48,5 @@ def main(args=None): print(merge_sort(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/quicksort.py b/algorithms/impl/quicksort.py index 9274c21..6f8e823 100644 --- a/algorithms/impl/quicksort.py +++ b/algorithms/impl/quicksort.py @@ -76,19 +76,19 @@ def quicksort_random(xs): _ALGORITHMS = [ SortingAlgorithm( - 'quicksort_first', 'Quicksort (first element as pivot)', quicksort_first + "quicksort_first", "Quicksort (first element as pivot)", quicksort_first ), SortingAlgorithm( - 'quicksort_second', 'Quicksort (second element as pivot)', quicksort_second + "quicksort_second", "Quicksort (second element as pivot)", quicksort_second ), SortingAlgorithm( - 'quicksort_middle', 'Quicksort (middle element as pivot)', quicksort_middle + "quicksort_middle", "Quicksort (middle element as pivot)", quicksort_middle ), SortingAlgorithm( - 'quicksort_last', 'Quicksort (last element as pivot)', quicksort_last + "quicksort_last", "Quicksort (last element as pivot)", quicksort_last ), SortingAlgorithm( - 'quicksort_random', 'Quicksort (random element as pivot)', quicksort_random + "quicksort_random", "Quicksort (random element as pivot)", quicksort_random ), ] @@ -108,5 +108,5 @@ def main(args=None): print(quicksort_random(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/impl/selection_sort.py b/algorithms/impl/selection_sort.py index e9a5a09..9591169 100644 --- a/algorithms/impl/selection_sort.py +++ b/algorithms/impl/selection_sort.py @@ -20,7 +20,7 @@ def selection_sort(xs): _ALGORITHMS = [ - SortingAlgorithm('selection_sort', 'Selection sort', selection_sort), + SortingAlgorithm("selection_sort", "Selection sort", selection_sort), ] @@ -35,5 +35,5 @@ def main(args=None): print(selection_sort(list(xs))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/input_kind.py b/algorithms/input_kind.py index 53938b0..b91d298 100644 --- a/algorithms/input_kind.py +++ b/algorithms/input_kind.py @@ -11,23 +11,23 @@ seed() class InputKind(Enum): - BEST, AVERAGE, WORST = 'best', 'average', 'worst' + BEST, AVERAGE, WORST = "best", "average", "worst" def __str__(self): return self.value def _gen_input_from(xs): - return array('l', xs) + return array("l", xs) def gen_input_for_sorting(n, case=InputKind.AVERAGE): if n < 0: - raise ValueError('input length cannot be less than zero') + raise ValueError("input length cannot be less than zero") if case is InputKind.BEST: return _gen_input_from(range(n)) if case is InputKind.AVERAGE: return _gen_input_from(sample(range(n), n)) if case is InputKind.WORST: return _gen_input_from(range(n - 1, -1, -1)) - raise NotImplementedError('invalid input kind: ' + str(case)) + raise NotImplementedError("invalid input kind: " + str(case)) diff --git a/algorithms/params.py b/algorithms/params.py index d1122c4..818ca47 100644 --- a/algorithms/params.py +++ b/algorithms/params.py @@ -13,9 +13,9 @@ from .timer import Timer class TimeUnits(Enum): - SECONDS = 'seconds' - MILLISECONDS = 'milliseconds' - MICROSECONDS = 'microseconds' + SECONDS = "seconds" + MILLISECONDS = "milliseconds" + MICROSECONDS = "microseconds" def get_factor(self): if self is TimeUnits.SECONDS: @@ -24,7 +24,7 @@ class TimeUnits(Enum): return 1000.0 if self is TimeUnits.MICROSECONDS: return 1000000.0 - raise NotImplementedError('invalid time units: ' + str(self)) + raise NotImplementedError("invalid time units: " + str(self)) def __str__(self): return self.value @@ -56,12 +56,12 @@ class AlgorithmParameters: @min_len.setter def min_len(self, val): if not isinstance(val, Integral): - raise TypeError('must be an integral value') + raise TypeError("must be an integral value") val = int(val) if val < 0: - raise ValueError('must be non-negative') + raise ValueError("must be non-negative") if self.max_len is not None and self.max_len < val: - raise ValueError('must not be greater than the maximum length') + raise ValueError("must not be greater than the maximum length") self._min_len = val @property @@ -71,12 +71,12 @@ class AlgorithmParameters: @max_len.setter def max_len(self, val): if not isinstance(val, Integral): - raise TypeError('must be an integral value') + raise TypeError("must be an integral value") val = int(val) if val < 0: - raise ValueError('must be non-negative') + raise ValueError("must be non-negative") if self.min_len is not None and self.min_len > val: - raise ValueError('must not be lesser than the minimum length') + raise ValueError("must not be lesser than the minimum length") self._max_len = val @property @@ -86,10 +86,10 @@ class AlgorithmParameters: @iterations.setter def iterations(self, val): if not isinstance(val, Integral): - raise TypeError('must be an integral value') + raise TypeError("must be an integral value") val = int(val) if val < 1: - raise ValueError('must be positive') + raise ValueError("must be positive") self._iterations = val def measure_running_time(self): @@ -105,14 +105,14 @@ class AlgorithmParameters: @staticmethod def _format_plot_xlabel(): - return 'Input length' + return "Input length" @staticmethod def _format_plot_ylabel(units): - return 'Running time ({})'.format(units) + return "Running time ({})".format(units) def _format_plot_title(self): - return '{}, {} case'.format(self.algorithm.display_name, self.input_kind) + return "{}, {} case".format(self.algorithm.display_name, self.input_kind) def _format_plot_suptitle(self): return self.algorithm.display_name diff --git a/algorithms/plotter.py b/algorithms/plotter.py index d3e4ee4..f755144 100644 --- a/algorithms/plotter.py +++ b/algorithms/plotter.py @@ -9,7 +9,7 @@ import matplotlib.pyplot as plt class PlotBuilder: def __init__(self): self._fig, self._ax = plt.subplots(figsize=(8, 6), dpi=200) - self._ax.grid(alpha=0.8, linestyle=':') + self._ax.grid(alpha=0.8, linestyle=":") def plot(self, title, xlabel, ylabel, xs, ys): self._ax.set_title(title) diff --git a/algorithms/scripts/plot.py b/algorithms/scripts/plot.py index 5eb8b16..25a87f7 100755 --- a/algorithms/scripts/plot.py +++ b/algorithms/scripts/plot.py @@ -40,9 +40,9 @@ def _parse_non_negative_integer(s): try: n = int(s) except ValueError: - raise argparse.ArgumentTypeError('must be a non-negative integer: ' + str(s)) + raise argparse.ArgumentTypeError("must be a non-negative integer: " + str(s)) if n < 0: - raise argparse.ArgumentTypeError('must be a non-negative integer') + raise argparse.ArgumentTypeError("must be a non-negative integer") return n @@ -50,9 +50,9 @@ def _parse_positive_integer(s): try: n = int(s) except ValueError: - raise argparse.ArgumentTypeError('must be a positive integer: ' + str(s)) + raise argparse.ArgumentTypeError("must be a positive integer: " + str(s)) if n < 1: - raise argparse.ArgumentTypeError('must be a positive integer') + raise argparse.ArgumentTypeError("must be a positive integer") return n @@ -60,16 +60,16 @@ def _parse_input_kind(s): try: return InputKind(s) except ValueError: - raise argparse.ArgumentTypeError('invalid input kind: ' + str(s)) + raise argparse.ArgumentTypeError("invalid input kind: " + str(s)) def _format_algorithm(codename): - return '* {}: {}'.format(codename, registry.get(codename).display_name) + return "* {}: {}".format(codename, registry.get(codename).display_name) def _format_available_algorithms(): - descr = 'available algorithms (in the CODENAME: DISPLAY_NAME format):\n' - return descr + '\n'.join(map(_format_algorithm, sorted(registry.get_codenames()))) + descr = "available algorithms (in the CODENAME: DISPLAY_NAME format):\n" + return descr + "\n".join(map(_format_algorithm, sorted(registry.get_codenames()))) def _format_description(): @@ -89,48 +89,48 @@ def _parse_args(args=None): parser = _create_argument_parser() parser.add_argument( - 'algorithm', - metavar='CODENAME', + "algorithm", + metavar="CODENAME", choices=registry.get_codenames(), - help='algorithm codename', + help="algorithm codename", ) parser.add_argument( - '--iterations', - '-r', - metavar='N', + "--iterations", + "-r", + metavar="N", type=_parse_positive_integer, default=_DEFAULT_ITERATIONS, - help='set number of algorithm iterations', + help="set number of algorithm iterations", ) parser.add_argument( - '--input', - '-i', - dest='input_kind', + "--input", + "-i", + dest="input_kind", choices=InputKind, type=_parse_input_kind, default=_DEFAULT_INPUT_KIND, - help='specify input kind', + help="specify input kind", ) parser.add_argument( - '--min', - '-a', - metavar='N', - dest='min_len', + "--min", + "-a", + metavar="N", + dest="min_len", type=_parse_non_negative_integer, default=_DEFAULT_MIN_LENGTH, - help='set min input length', + help="set min input length", ) parser.add_argument( - '--max', - '-b', - metavar='N', - dest='max_len', + "--max", + "-b", + metavar="N", + dest="max_len", type=_parse_non_negative_integer, default=_DEFAULT_MAX_LENGTH, - help='set max input length', + help="set max input length", ) parser.add_argument( - '--output', '-o', metavar='PATH', dest='output_path', help='set plot file path' + "--output", "-o", metavar="PATH", dest="output_path", help="set plot file path" ) return parser.parse_args(args) @@ -140,5 +140,5 @@ def main(args=None): plot_algorithm(**vars(_parse_args(args))) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/algorithms/scripts/test.py b/algorithms/scripts/test.py index 42b1be8..52acc34 100755 --- a/algorithms/scripts/test.py +++ b/algorithms/scripts/test.py @@ -30,9 +30,9 @@ def _parse_non_negative_integer(s): try: n = int(s) except ValueError: - raise argparse.ArgumentTypeError('must be a non-negative integer: ' + str(s)) + raise argparse.ArgumentTypeError("must be a non-negative integer: " + str(s)) if n < 0: - raise argparse.ArgumentTypeError('must be a non-negative integer') + raise argparse.ArgumentTypeError("must be a non-negative integer") return n @@ -40,16 +40,16 @@ def _parse_input_kind(s): try: return InputKind(s) except ValueError: - raise argparse.ArgumentTypeError('invalid input kind: ' + str(s)) + raise argparse.ArgumentTypeError("invalid input kind: " + str(s)) def _format_algorithm(codename): - return '* {}: {}'.format(codename, registry.get(codename).display_name) + return "* {}: {}".format(codename, registry.get(codename).display_name) def _format_available_algorithms(): - descr = 'available algorithms (in the CODENAME: DISPLAY_NAME format):\n' - return descr + '\n'.join(map(_format_algorithm, sorted(registry.get_codenames()))) + descr = "available algorithms (in the CODENAME: DISPLAY_NAME format):\n" + return descr + "\n".join(map(_format_algorithm, sorted(registry.get_codenames()))) def _format_description(): @@ -69,28 +69,28 @@ def _parse_args(args=None): parser = _create_argument_parser() parser.add_argument( - 'algorithm', - metavar='CODENAME', + "algorithm", + metavar="CODENAME", choices=registry.get_codenames(), - help='algorithm codename', + help="algorithm codename", ) parser.add_argument( - '--input', - '-i', - dest='input_kind', + "--input", + "-i", + dest="input_kind", choices=InputKind, type=_parse_input_kind, default=_DEFAULT_INPUT_KIND, - help='specify input kind', + help="specify input kind", ) parser.add_argument( - '--length', - '-l', - '-n', - metavar='N', + "--length", + "-l", + "-n", + metavar="N", type=_parse_non_negative_integer, default=_DEFAULT_LENGTH, - help='set input length', + help="set input length", ) return parser.parse_args(args) @@ -100,5 +100,5 @@ def main(args=None): test(**vars(_parse_args(args))) -if __name__ == '__main__': +if __name__ == "__main__": main() |
