python data structures sorting algorithms bubble sort merge sort insertion sort shell sort selection sort python data structures searching algorithms linear search interpolation search python data structures graph algorithms depth first traversal breadth first traversal python data structures algorithm analysis algorithm complexity space complexity time complexity python data structures algorithm types asymptotic notations common asymptotic notations python data structures algorithm classes greedy algorithms divide and conquer dynamic programming python data structures amortized analysis python data structures algorithm justification vii