====== LU01.L03 - Funktionaler Bubblesort ======
Der Bubble-Sort-Algorithmus ist normalerweise mit einer imperativen Programmierweise verknüpft, aber es ist möglich, eine rekursive, funktionale Version dieses Sortieralgorithmus zu schreiben. Hier ist ein Beispiel in Python:
Möglichkeit mit Counter ''n''
def bubble_pass(lst):
if len(lst) <= 1:
return lst
if lst[0] > lst[1]:
return [lst[1]] + bubble_pass([lst[0]] + lst[2:])
return [lst[0]] + bubble_pass(lst[1:])
def bubble_sort(lst, n=None):
if n is None:
n = len(lst)
if n == 1:
return lst
lst = bubble_pass(lst)
return bubble_sort(lst, n - 1)
if __name__ == '__main__':
unsorted_list = [5, 2, 9, 1, 5, 6]
sorted_list = bubble_sort(unsorted_list, 3)
print(sorted_list) # Ausgabe: [1, 2, 5, 5, 6, 9]
Mit Funktion ''is_sort()''
def bubble_sort_rek(list):
if len(list) <= 1:
return list
if list[0] > list[1]:
return [list[1]] + bubble_sort_rek([list[0]]+list[2:])
return [list[0]] + bubble_sort_rek(list[1:])
def run_bubble_sort_is_sort(list):
list = bubble_sort_rek(list)
if is_sort(list):
return list
return run_bubble_sort_is_sort(list)
def is_sort(list):
return all(list[i] <= list[i+1] for i in range(len(list)-1))
if __name__ == '__main__':
arr = [64, 34, 25, 12, 22, 11, 90]
arr_new = run_bubble_sort_is_sort(arr)
print(arr_new)
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi