In addition to displaying your mastery of Java basics (for example, syntax, object-oriented concepts, arrays, classes, objects, and interfaces) as covered on previous quizzes, you should show your understanding of the topics covered since the last quiz: - algorithmic efficiency, - sorting algorithms - linked lists basics Specific Concepts you should understand: - Binary search - Problem size - Worst case / average case / best case performance - Growth function - Big Oh Notation - Sorting - Bubble Sort - Insertion Sort - Selection Sort - Merge Sort - Sorting objects instead of integers - Linked List basics only - Nodes: data and next fields - Basic structure of how to add and remove items from a linked list Skills you should be able to demonstrate: - Apply the definition of a growth function to show that a particular function (e.g., n^4 + 1000n^3 + 10000000) falls into a certain efficiency class (e.g., O(n^4)). - Determine the Big Oh efficiency of an algorithm, either iterative or recursive - Give examples of algorithms with different Big Oh efficiencies; you should be able to provide both iterative and recursive examples - Trace through the execution of the sorting algorithms mentioned above on specified input arrays - Understand the structure of the sorting algorithms mentioned above well enough to be able to code them, including to sort objects of a specified class. - You should be able to implement the Comparable method for a class to define the order used for sorting instances of the class. - Understand special cases when particular sorting algorithms are unusually fast or slow - Draw pictures of Linked Lists - Illustrate the effects of basic operations -- add and remove -- on a Linked List