diff --git a/DIRECTORY.md b/DIRECTORY.md index 81c386f8..255f3636 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -149,6 +149,7 @@ * [Bubble Sort Ascii](https://github.com/bellshade/Python/blob/main/algorithm/sorting/bubble_sort_ascii.py) * [Bucket Sort](https://github.com/bellshade/Python/blob/main/algorithm/sorting/bucket_sort.py) * [Circle Sort](https://github.com/bellshade/Python/blob/main/algorithm/sorting/circle_sort.py) + * [Gnome Sorting](https://github.com/bellshade/Python/blob/main/algorithm/sorting/gnome_sorting.py) * [Merge Sort](https://github.com/bellshade/Python/blob/main/algorithm/sorting/merge_sort.py) * [Pop Sort](https://github.com/bellshade/Python/blob/main/algorithm/sorting/pop_sort.py) * [Quick Sorting](https://github.com/bellshade/Python/blob/main/algorithm/sorting/quick_sorting.py) diff --git a/algorithm/sorting/gnome_sorting.py b/algorithm/sorting/gnome_sorting.py new file mode 100644 index 00000000..865667b2 --- /dev/null +++ b/algorithm/sorting/gnome_sorting.py @@ -0,0 +1,38 @@ +def gnome_sorting(daftar: list) -> list: + """ + Implementasi dari algoritma gnome sorting + + fungsi yang menerima daftar yang dapat nantinya diubah + dan diurut dengan elemen heterogen yang bisa dibandingkan, + lalu mengembalikan list tersebut dalam urutan menaik + + Parameter: + daftar (list): data yang ingin diberikan + + Return: + (list): hasil sorting gnome + + Contoh: + >>> gnome_sorting([0, 5, 3, 2, 2]) + [0, 2, 2, 3, 5] + """ + if len(daftar) <= 1: + return daftar + + i = 1 + while i < len(daftar): + if daftar[i - 1] <= daftar[i]: + i += 1 + else: + # tukar elemen jika tidak dalam urutan yang bener + daftar[i - 1], daftar[i] = daftar[i], daftar[i - 1] + i -= 1 + if i == 0: + i = 1 + return daftar + + +if __name__ == "__main__": + import doctest + + doctest.testmod(verbose=True)