code enhancement in sort.double_sort (#10798)

* don't need to return list because list is mutable

* Don't need to return list as list is mutable
* use advantage of python in swapping
* filter blank inputs from input list
* minor changes

* minor mistake

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* more readable

* Update double_sort.py

* last fixes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestions from code review

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
Krishna-singhal 2023-10-23 13:21:27 +05:30 committed by GitHub
parent a8b6bda993
commit 417b7edfc3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,7 @@
def double_sort(lst): from typing import Any
def double_sort(collection: list[Any]) -> list[Any]:
"""This sorting algorithm sorts an array using the principle of bubble sort, """This sorting algorithm sorts an array using the principle of bubble sort,
but does it both from left to right and right to left. but does it both from left to right and right to left.
Hence, it's called "Double sort" Hence, it's called "Double sort"
@ -14,29 +17,28 @@ def double_sort(lst):
>>> double_sort([-3, 10, 16, -42, 29]) == sorted([-3, 10, 16, -42, 29]) >>> double_sort([-3, 10, 16, -42, 29]) == sorted([-3, 10, 16, -42, 29])
True True
""" """
no_of_elements = len(lst) no_of_elements = len(collection)
for _ in range( for _ in range(
int(((no_of_elements - 1) / 2) + 1) int(((no_of_elements - 1) / 2) + 1)
): # we don't need to traverse to end of list as ): # we don't need to traverse to end of list as
for j in range(no_of_elements - 1): for j in range(no_of_elements - 1):
if ( # apply the bubble sort algorithm from left to right (or forwards)
lst[j + 1] < lst[j] if collection[j + 1] < collection[j]:
): # applying bubble sort algorithm from left to right (or forwards) collection[j], collection[j + 1] = collection[j + 1], collection[j]
temp = lst[j + 1] # apply the bubble sort algorithm from right to left (or backwards)
lst[j + 1] = lst[j] if collection[no_of_elements - 1 - j] < collection[no_of_elements - 2 - j]:
lst[j] = temp (
if ( collection[no_of_elements - 1 - j],
lst[no_of_elements - 1 - j] < lst[no_of_elements - 2 - j] collection[no_of_elements - 2 - j],
): # applying bubble sort algorithm from right to left (or backwards) ) = (
temp = lst[no_of_elements - 1 - j] collection[no_of_elements - 2 - j],
lst[no_of_elements - 1 - j] = lst[no_of_elements - 2 - j] collection[no_of_elements - 1 - j],
lst[no_of_elements - 2 - j] = temp )
return lst return collection
if __name__ == "__main__": if __name__ == "__main__":
print("enter the list to be sorted") # allow the user to input the elements of the list on one line
lst = [int(x) for x in input().split()] # inputing elements of the list in one line unsorted = [int(x) for x in input("Enter the list to be sorted: ").split() if x]
sorted_lst = double_sort(lst)
print("the sorted list is") print("the sorted list is")
print(sorted_lst) print(f"{double_sort(unsorted) = }")