diff --git a/hw3/hw3pr1.pl b/hw3/hw3pr1.pl new file mode 100644 index 0000000..c3fce50 --- /dev/null +++ b/hw3/hw3pr1.pl @@ -0,0 +1,25 @@ +my_sort([], Sorted2, Sorted2). + +my_sort(Unsorted, Sorted, Sorted2) :- + get_max(Unsorted, Max, LessList), + append(Sorted, [Max], NewSorted), + my_sort(LessList, NewSorted, Sorted2). + +my_sort(Unsorted, Sorted) :- + my_sort(Unsorted, [], ReverseSorted), + reverse(ReverseSorted, Sorted), + write(Sorted). + +get_max([], Max, LessList, Max, LessList). + +get_max(Unsorted, X, Unsorted2, Max, LessList) :- + select(Y, Unsorted, Rest), + (X > Y, + append(Unsorted2, [Y], NewList), + get_max(Rest, X, NewList, Max, LessList); + append(Unsorted2, [X], NewList), + get_max(Rest, Y, NewList, Max, LessList)). + +get_max(Unsorted, Max, LessList) :- + select(X, Unsorted, Unsorted2), + get_max(Unsorted2, X, [], Max, LessList). diff --git a/hw3/hw3pr2.pl b/hw3/hw3pr2.pl new file mode 100644 index 0000000..c3fce50 --- /dev/null +++ b/hw3/hw3pr2.pl @@ -0,0 +1,25 @@ +my_sort([], Sorted2, Sorted2). + +my_sort(Unsorted, Sorted, Sorted2) :- + get_max(Unsorted, Max, LessList), + append(Sorted, [Max], NewSorted), + my_sort(LessList, NewSorted, Sorted2). + +my_sort(Unsorted, Sorted) :- + my_sort(Unsorted, [], ReverseSorted), + reverse(ReverseSorted, Sorted), + write(Sorted). + +get_max([], Max, LessList, Max, LessList). + +get_max(Unsorted, X, Unsorted2, Max, LessList) :- + select(Y, Unsorted, Rest), + (X > Y, + append(Unsorted2, [Y], NewList), + get_max(Rest, X, NewList, Max, LessList); + append(Unsorted2, [X], NewList), + get_max(Rest, Y, NewList, Max, LessList)). + +get_max(Unsorted, Max, LessList) :- + select(X, Unsorted, Unsorted2), + get_max(Unsorted2, X, [], Max, LessList).