From 5f66061be5c4f3f2ffc5c1a17c213bef4b9b15ed Mon Sep 17 00:00:00 2001 From: lorduke22 Date: Sat, 5 Oct 2024 17:05:08 +0200 Subject: [PATCH 1/2] add doctest for quick_sort_3_partition. Contributes to #9943 --- sorts/quick_sort_3_partition.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sorts/quick_sort_3_partition.py b/sorts/quick_sort_3_partition.py index 1a6db6a36..279b9a68f 100644 --- a/sorts/quick_sort_3_partition.py +++ b/sorts/quick_sort_3_partition.py @@ -1,4 +1,27 @@ def quick_sort_3partition(sorting: list, left: int, right: int) -> None: + """ " + Python implementation of quick sort algorithm with 3-way partition. + The idea of 3-way quick sort is based on "Dutch National Flag algorithm". + + :param sorting: sort list + :param left: left endpoint of sorting + :param right: right endpoint of sorting + :return: None + + Examples: + >>> array1 = [5, -1, -1, 5, 5, 24, 0] + >>> quick_sort_3partition(array1, 0, 6) + >>> array1 + [-1, -1, 0, 5, 5, 5, 24] + >>> array2 = [9, 0, 2, 6] + >>> quick_sort_3partition(array2, 0, 3) + >>> array2 + [0, 2, 6, 9] + >>> array3 = [] + >>> quick_sort_3partition(array3, 0, 0) + >>> array3 + [] + """ if right <= left: return a = i = left From 0d5c25c8393fd02dacc016446234cf4ca69dacca Mon Sep 17 00:00:00 2001 From: lorduke22 Date: Mon, 7 Oct 2024 22:09:07 +0200 Subject: [PATCH 2/2] Add doctests to dijkstra_2.py --- graphs/dijkstra_2.py | 65 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/graphs/dijkstra_2.py b/graphs/dijkstra_2.py index f548463ff..d95e3bbc1 100644 --- a/graphs/dijkstra_2.py +++ b/graphs/dijkstra_2.py @@ -1,14 +1,47 @@ def print_dist(dist, v): + """ + Print vertex distance + + Examples: + >>> print_dist([float('inf'),float('inf'),float('inf')], 3) + + Vertex Distance + 0 INF + 1 INF + 2 INF + >>> print_dist([2.0,6.0,10.0,3.0], 4) + + Vertex Distance + 0 2 + 1 6 + 2 10 + 3 3 + >>> print_dist([], 4) + Traceback (most recent call last): + ... + IndexError: list index out of range + """ print("\nVertex Distance") for i in range(v): if dist[i] != float("inf"): - print(i, "\t", int(dist[i]), end="\t") + print(i, " ", int(dist[i]), end="") else: - print(i, "\t", "INF", end="\t") + print(i, " ", "INF", end="") print() def min_dist(mdist, vset, v): + """ + Finds the index of the node with the minimum distance between no-visited nodes + + Examples: + >>> dist = [0.0, float('inf'), float('inf'), float('inf')] + >>> set = [False, False, False, False] + >>> min_dist(dist, set, 4) + 0 + >>> min_dist([], [], 0) + -1 + """ min_val = float("inf") min_ind = -1 for i in range(v): @@ -19,6 +52,30 @@ def min_dist(mdist, vset, v): def dijkstra(graph, v, src): + """ + Dijkstra's algorithm to calculate the shortest distances from the src source node + to all other nodes in a graph represented as an adjacency matrix. + + Examples: + >>> G1 = [[0.0, 6.0, 2.0, float('inf')], + ... [float('inf'), 0.0, 9.0, 1.0], + ... [float('inf'), float('inf'), 0.0, 3.0], + ... [float('inf'), float('inf'), float('inf'), 0.0]] + >>> dijkstra(G1, 4, 5) + Traceback (most recent call last): + ... + IndexError: list assignment index out of range + >>> G2 = [[0.0, 6.0, 2.0, float('inf')], + ... [float('inf'), 0.0, 9.0, 1.0], + ... [float('inf'), float('inf'), 0.0, 3.0], + ... [float('inf'), float('inf'), float('inf'), 0.0]] + >>> dijkstra(G2, 4, 0) + + Vertex Distance + 0 0 + 1 6 + 2 2 + """ mdist = [float("inf") for _ in range(v)] vset = [False for _ in range(v)] mdist[src] = 0.0 @@ -39,6 +96,10 @@ def dijkstra(graph, v, src): if __name__ == "__main__": + import doctest + + doctest.testmod(verbose=True) + V = int(input("Enter number of vertices: ").strip()) E = int(input("Enter number of edges: ").strip())