Skip to content

Comments

Add smooth sort algorithm implementation#13641

Open
aadr22 wants to merge 3 commits intoTheAlgorithms:masterfrom
aadr22:feat/add-smoothsort
Open

Add smooth sort algorithm implementation#13641
aadr22 wants to merge 3 commits intoTheAlgorithms:masterfrom
aadr22:feat/add-smoothsort

Conversation

@aadr22
Copy link

@aadr22 aadr22 commented Oct 21, 2025

Describe your change:

This PR adds a pure Python implementation of the Smoothsort algorithm to the sorts directory.

About Smoothsort:

  • Designed by Edsger W. Dijkstra in 1981
  • Variation of heapsort using Leonardo heap structure
  • O(n) best case performance on nearly-sorted data
  • O(n log n) worst case performance
  • In-place sorting with O(1) space complexity

Implementation features:

  • Pure Python implementation of Dijkstra's smoothsort algorithm
  • Uses Leonardo heap structure for O(n) best case on sorted data
  • Includes comprehensive doctests with various edge cases
  • Follows repository coding standards with type hints and docstrings
  • In-place sorting with O(1) space complexity
  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues then the description above includes the issue number(s) with a closing keyword: "Fixes #ISSUE-NUMBER".

- Pure Python implementation of Dijkstra's smoothsort algorithm
- Uses Leonardo heap structure for O(n) best case on sorted data
- Includes comprehensive doctests with various edge cases
- Follows repository coding standards with type hints and docstrings
- In-place sorting with O(1) space complexity
@algorithms-keeper algorithms-keeper bot added the require tests Tests [doctest/unittest/pytest] are required label Oct 21, 2025
Copy link

@algorithms-keeper algorithms-keeper bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Click here to look at the relevant links ⬇️

🔗 Relevant Links

Repository:

Python:

Automated review generated by algorithms-keeper. If there's any problem regarding this review, please open an issue about it.

algorithms-keeper commands and options

algorithms-keeper actions can be triggered by commenting on this PR:

  • @algorithms-keeper review to trigger the checks for only added pull request files
  • @algorithms-keeper review-all to trigger the checks for all the pull request files, including the modified files. As we cannot post review comments on lines not part of the diff, this command will post all the messages in one comment.

NOTE: Commands are in beta and so this feature is restricted only to a member or owner of the organization.

return collection


def _generate_leonardo_numbers(max_value: int) -> list[int]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _generate_leonardo_numbers

return leonardo


def _smooth_sort_build(arr: list[int], leonardo: list[int]) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _smooth_sort_build

_add_to_heap(arr, i, leonardo)


def _smooth_sort_extract(arr: list[int], leonardo: list[int]) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _smooth_sort_extract

_extract_from_heap(arr, i, leonardo)


def _add_to_heap(arr: list[int], end: int, leonardo: list[int]) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _add_to_heap

_heapify_up(arr, end, leonardo)


def _extract_from_heap(arr: list[int], end: int, leonardo: list[int]) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _extract_from_heap

_heapify_down(arr, max_idx, end - 1)


def _heapify_up(arr: list[int], index: int, leonardo: list[int]) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _heapify_up

break


def _heapify_down(arr: list[int], index: int, end: int) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _heapify_down

break


def _find_parent(index: int, leonardo: list[int]) -> int:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file sorts/smooth_sort.py, please provide doctest for the function _find_parent

@algorithms-keeper algorithms-keeper bot added the awaiting reviews This PR is ready to be reviewed label Oct 21, 2025
- Added comprehensive doctests for all 7 helper functions
- All doctests pass successfully
- Addresses bot review feedback for test coverage
@algorithms-keeper algorithms-keeper bot removed the require tests Tests [doctest/unittest/pytest] are required label Oct 21, 2025
- Renamed 'leonardo' to '_leonardo' in _extract_from_heap and _find_parent
- Indicates parameters are intentionally unused in this implementation
- All doctests still pass
- No linter errors
@algorithms-keeper algorithms-keeper bot added tests are failing Do not merge until tests pass and removed tests are failing Do not merge until tests pass labels Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting reviews This PR is ready to be reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant