1 / 30

Sorting And Searching

Explore the problem of sorting a collection of keys to produce an ordered collection, with various sorting algorithms and their analysis.

lorettag
Download Presentation

Sorting And Searching

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sorting And Searching CSE116A,B B.Ramamurthy

  2. Introduction • The problem of sorting a collection of keys to produce an ordered collection is one of the richest in computer science. • The richness derives from the fact that there are a number of ways of solving the sorting problem. • Sorting is a fascinating operation that provides a model for investigating many problems in Computer Science. Ex: analysis and comparison of algorithms, divide and conquer, space and time tradeoff, recursion etc. B.Ramamurthy

  3. Sorting • Comparison based: selection, insertion sort (with online animations) • Divide and conquer: merge sort, quick sort (with animations from supplements of your text book) • Priority Queue /Heap based: heap sort • Assume: Ascending order for all our discussion B.Ramamurthy

  4. Selection Sort • Select the first smallest element, place it in first location (by exchanging contents of locations), find the next smallest, place it in the next location, and so on. • We will look at an example, an algorithm, analyze the algorithm, and look at code implementation. B.Ramamurthy

  5. 10 8 6 2 16 4 Selection Sort: Example 2 8 6 10 16 4 2 4 6 10 16 8 2 4 6 10 16 8 Sorted array 2 4 6 8 16 10 2 4 6 8 10 16 B.Ramamurthy

  6. Selection Sort Pseudo Code • Let cursor be pointer to first element of an n element list to be sorted. • Repeat until cursor points to last but one element. 2.1 Search for the smallest element in the list starting from the cursor. Let it be at location target. 2.2 Exchange elements at cursor and target. 2.3 Update cursor to point to next element. B.Ramamurthy

  7. Sort Analysis • Let el be the list; n be the number of elements; cursor = 0; target = 0; • while (cursor < n-1) 2.1.1 target = cursor; 2.1.2 for (i= cursor+1; i < n; i++) if (el[i] < el[target]) target =i; 2.2 exchange (el[target], el[cursor]); // takes 3 assignments 2.3 cursor++; (n-1) *4 + 2 *(n + (n-1) + (n-2) ..1) 4n – 4 + 2*n(n+1)/2 = 4n – 4 + n2 + n = n2 + 5n - 4 An2 + B n + C where A= 1, B = 5, C = -4; for large n, drop the constant, lower order term in n, and the multiplicative constant to get big-O notation O(n2) – quadratic sort B.Ramamurthy

  8. 10 2 8 4 6 6 8 2 16 10 4 16 Insertion Sort Unsorted array 10 Trivially sorted 8 10 Insert 8 6 8 10 Insert 6 2 6 8 10 Insert 2 2 6 8 10 16 Insert 4 Insert 16 B.Ramamurthy

  9. Insertion Sort Pseudo Code • Single element is trivially sorted; start with first element; • Repeat for second to nth element of the list: • 2.1 cursor = next location; • 2.2 Find a location to insert for list[cursor] by comparing • and shifting; • let the location be target; • 2.3 Insert list[target] = list[cursor] B.Ramamurthy

  10. Insertion Sort Analysis • cursor = 0; • while (cursor < n) • 2.1 cursor = cursor + 1; • 2.2 temp = list[cursor] // save element to inserted • 2.2.2 j = cursor; //find location • 2.2.3 while (j > 0 && list[j-1] > temp ) • list[j] = list[j-1]; //shift right • j = j –1; • // assert : location found or hit left end(j=0) • 2.3 list[j] = temp; • Worst case: O(n2) quadratic • Best case : linear (when the list is already sorted) B.Ramamurthy

  11. Merge Sort • Divide and Conquer • Divide the list into two subsets s1, and s2 • (recurse) Sort s1 and s2 by divide and conquer • (conquer) Merge the sorted s1 and s2. • O(n log n) algorithm B.Ramamurthy

  12. Merge Sort (s) mergeSort(s): If S.size() > 1 1. S1, S2  partition (S, n/2) 2. mergeSort(s1); 3. mergeSort(s2); 4. S  merge(s1,s2) Lets look at examples. B.Ramamurthy

  13. 10 8 6 2 16 4 16 4 10 8 6 Example partition 2 S1 S2 10 8 6 2 16 4 S21 S22 S11 S12 8 6 16 4 S121 S122 S221 S222 B.Ramamurthy

  14. 2 4 6 8 10 16 4 16 6 8 10 Example merge 2 S1 S2 10 6 8 2 4 16 S21 S22 S11 S12 8 6 16 4 S121 S122 S221 S222 B.Ramamurthy

  15. Algorithm list merge(s1, s2) • s  empty list • while (!s1.empty() && !s2.empty()) • // Assert: both lists non empty • 2.1 if s1.firstElem() < s2.firstElem() • s.insertLast(s1.removeFirst()); • else • s.insertLast(s2.removeFirst()); • 3. //Assert: s1 is empty or s2 is empty • 3.1 while (!s1.empty()) • s.insertLast(s1.removeFirst()); • 3.2 while (!s2.empty()) • s.insertLast(s2.removeFirst()); • 4. return s; 2*k n-k n + k n + c*n (c+1)*n O(n) B.Ramamurthy

  16. Analysis of merge sort • Running time is time spent each level merging the nodes: • Number of levels: 1+ ceiling(log n) • Since the time spent at each of the is O(n), we have the following result: • Algorithm mergesort sorts a list of size n in O(n log n) time in the worst case. B.Ramamurthy

  17. Quick Sort • Recursive sort; divide and conquer • Divide: select an element called the pivot; typically last or first element is chosen to be the pivot; partition the list into three lists: L: elements in S less than pivot E: elements in S equal to pivot (single element for list of distinct elements) G: elements in S greater than pivot • Recurse: Recursively quick sort the lists L and G. • Conquer: Form the sorted list by concatenating L, E and G. B.Ramamurthy

  18. 10 8 6 2 10 8 6 10 8 6 null 10 8 10 null Quicksort Example pivot 16 4 2 16 null Partition around pivot B.Ramamurthy

  19. 10 8 6 2 10 6 6 8 8 8 10 6 10 16 16 10 8 6 6 8 10 8 10 10 8 Quicksort Example pivot 16 4 2 4 16 2 null null Concatenate {L}{pivot}{G} 10 null B.Ramamurthy

  20. Quicksort • Worst case: when the list is already sorted. Let si be the sum of all sizes of the nodes to be sorted at level i. In the worst case the number of levels is n. S0 = n S1 = n –1 since every element skews to one side; S2 = n –2 and so on. • worst case running time is O(n + (n-1) + (n-2) + ..1) = O(n2) • best case: O(n log n) B.Ramamurthy

  21. Heap : Definition Heap is a loosely ordered complete binary tree. A heap is a complete binary tree with values stored in its nodes such that no child has a value greater than the value of its parent. A heap is a complete binary tree : 1. That is empty or 2a. Whose root contains a search key greater than or equal to both its children node. 2b. Whose left subtree and right subtree are heaps. B.Ramamurthy

  22. Types of heaps • Heaps can be “max” heaps or “min” heaps. Above definition was for a “max” heap. • In a max-heap the root is higher than or equal to the values in its left and right child. • In a min-heap the root is smaller than or equal to the values in its left and right child. B.Ramamurthy

  23. ADT Heap createHeap ( ) destroyHeap ( ) empty ( ) heapInsert (Object newItem) Object heapDelete ( ) // always the root B.Ramamurthy

  24. 6 3 5 9 2 10 1. Implement it as a complete binary tree. 2. Heap left sub-tree. 3. Heap right sub-tree. 4. Heap the root, left node and right node of root. Note : When heaping choose the largest of the two children node to move up for “max” heap. Example Consider data set: B.Ramamurthy

  25. 6 6 2 9 5 3 5 6 10 3 10 2 9 10 2 3 9 9 10 6 4 3 3 5 5 2 2 Example 1 B.Ramamurthy

  26. In a max heap the root item is the largest and is the chosen one for deletion. 1. After deletion of root, two disjoint heaps result. 2. Place last node as a root, to form a semi-heap. 3. Use trickle-down to form a heap. Running time : 3*log N + 1 = O(log N) Consider a heap example discussed above. Delete root item. Delete Root Item B.Ramamurthy

  27. 1. Insert a node as a last node. 2. Trickle up (repeat for various levels) to form a heap. Consider inserting 15 into the heap of the “delete” example. Insert is also a O(log N) operation. Insert An Item B.Ramamurthy

  28. 9 1 5 6 3 15 2 2 9 9 5 15 2 repeat 5 6 3 6 2 3 2 Insert Node : Example 15 5 9 3 6 2 B.Ramamurthy

  29. Priority Queue implemented as a heap. Priority queue inserts are done according to some criteria known as “priority” Insert location are according to priority and delete are to the head of queue. PQueue constructor PQueueInsert PQueueDelete Data: Heap pQ; Priority Queue B.Ramamurthy

  30. Heap Sort • Heapsort: 1. Represent elements as a min-heap. 2. Delete item at root and add to result, as it is the smallest. 3. Heap, repeat step 2, until one item is left. 4. Delete the last item and add to result. O(N*log N) in the worst case! B.Ramamurthy

More Related