Download presentation
Presentation is loading. Please wait.
Published byWarren Banks Modified over 9 years ago
1
Comparison-Based Sorting & Analysis Smt Genap 2011-2012
2
Outline Several sorting algorithms: ◦ Bubble Sort ◦ Selection Sort ◦ Insertion Sort ◦ Shell Sort For each algorithm: ◦ Basic Idea ◦ Example ◦ Implementation ◦ Algorithm Analysis Smt Genap 2011-2012
3
Sorting Sorting = ordering. Sorted = ordered based on a particular way. Generally, collections of data are presented in a sorted manner. Examples of Sorting: ◦ Words in a dictionary are sorted (and case distinctions are ignored). ◦ Files in a directory are often listed in sorted order. ◦ The index of a book is sorted (and case distinctions are ignored). ◦ Many banks provide statements that list checks in increasing order (by check number). ◦ In a newspaper, the calendar of events in a schedule is generally sorted by date. ◦ Musical compact disks in a record store are generally sorted by recording artist. Why? ◦ Imagine finding the phone number of your friend in your mobile phone, but the phone book is not sorted. Smt Genap 2011-2012
4
Bubble Sort: Idea Idea: bubble in water. ◦ Bubble in water moves upward. Why? How? ◦ When a bubble moves upward, the water from above will move downward to fill in the space left by the bubble. Smt Genap 2011-2012
5
Bubble Sort: Example Notice that at least one element will be in the correct position each iteration. 4021433650583424 6521403430583424 6558 123400433424 1234006543583424 1 2 3 4 Smt Genap 2011-2012
6
Bubble Sort: Example Smt Genap 2011-2012 1032653435842404 0126534358424043 0126534358424043 6 7 8 Stop here… why? 1203340654358424 5
7
Bubble Sort: Implementation void sort(int a[]){ for (int i = a.length; i>=0; i--) { boolean swapped = false; for (int j = 0; j<i; j++) {... if (a[j] > a[j+1]) { int T = a[j]; a[j] = a[j+1]; a[j+1] = T; swapped = true; }... } if (!swapped) return; } Smt Genap 2011-2012
8
Bubble Sort: Analysis Running time: ◦ Worst case: O(N 2 ) ◦ Best case: O(N) -- when? why? Variant: ◦ bi-directional bubble sort original bubble sort: only works to one direction bi-directional bubble sort: works back and forth. Smt Genap 2011-2012
9
Selection Sort: Idea 1. We have two group of items: ◦ sorted group, and ◦ unsorted group 2. Initially, all items are in the unsorted group. The sorted group is empty. ◦ We assume that items in the unsorted group unsorted. ◦ We have to keep items in the sorted group sorted. 3. Select the “best” (eg. smallest) item from the unsorted group, then put the “best” item at the end of the sorted group. 4. Repeat the process until the unsorted group becomes empty. Smt Genap 2011-2012
10
Selection Sort: Example Smt Genap 2011-2012 4240213340655843 4021433404265583 4021433405836542 4021433650583424
11
Selection Sort: Example Smt Genap 2011-2012 4240213340655843 4221334065584340 4221334655843400 4221034655843403
12
Selection Sort: Example Smt Genap 2011-2012 1 4221346558434030 420346558434032 1420346558434032 1420346558434032 1420346558434032
13
Selection Sort: Implementation void sort(int a[]) throws Exception { for (int i = 0; i < a.length; i++) { int min = i; int j; /* Find the smallest element in the unsorted list */ for (j = i + 1; j < a.length; j++)... } if (a[j] < a[min]) { min = j; }... } Smt Genap 2011-2012
14
Selection Sort: Implementation /* Swap the smallest unsorted element into the end of the sorted list. */ int T = a[min]; a[min] = a[i]; a[i] = T;... } Smt Genap 2011-2012
15
Selection Sort: Analysis Running time: ◦ Worst case: O(N 2 ) ◦ Best case: O(N 2 ) Based on big-oh analysis, is selection sort better than bubble sort? Does the actual running time reflect the analysis? Smt Genap 2011-2012
16
Insertion Sort: Idea Idea: sorting cards. ◦ 8 | 5 9 2 6 3 ◦ 5 8 | 9 2 6 3 ◦ 5 8 9 | 2 6 3 ◦ 2 5 8 9 | 6 3 ◦ 2 5 6 8 9 | 3 ◦ 2 3 5 6 8 9 | Smt Genap 2011-2012
17
Insertion Sort: Idea 1. We have two group of items: ◦ sorted group, and ◦ unsorted group 2. Initially, all items in the unsorted group and the sorted group is empty. ◦ We assume that items in the unsorted group unsorted. ◦ We have to keep items in the sorted group sorted. 3. Pick any item from, then insert the item at the right position in the sorted group to maintain sorted property. 4. Repeat the process until the unsorted group becomes empty. Smt Genap 2011-2012
18
Insertion Sort: Example Smt Genap 2011-2012 4021433650583424 2401433650583424 1240433650583424 40
19
Insertion Sort: Example Smt Genap 2011-2012 1234043650583424 1240433650583424 1234043650583424
20
Insertion Sort: Example Smt Genap 2011-2012 1234043650583424 1234043650583424 12340436505834241234043650
21
Insertion Sort: Example Smt Genap 2011-2012 12340436505834241234043650 12340436505842412334365058404365 123404365042412334365058404365 12340436504212334365058443654258404365
22
Insertion Sort: Implementation Insertion sort to sort an array of integers public static void insertionSort (int[] a) { for (int ii = 1; ii < a.length; ii++) { int jj = ii; while (( jj > 0) && (a[jj] < a[jj - 1])) { int temp = a[jj]; a[jj] = a[jj - 1]; a[jj - 1] = temp; jj--; } Note: value of a[jj] always the same possibility for improvement of efficiency. Smt Genap 2011-2012
23
Insertion Sort: Efficient Implementation A slightly more efficient Insertion sort public static void insertionSort2 (int[] a) { for (int ii = 1; ii < a.length; ii++) { int temp = a[ii]; int jj = ii; while (( jj > 0) && (temp < a[jj - 1])) { a[jj] = a[jj - 1]; jj--; } a[jj] = temp; } Smt Genap 2011-2012
24
Insertion Sort: Analysis Running time analysis: ◦ Worst case: O(N 2 ) ◦ Best case: O(N) Is insertion sort faster than selection sort? Notice the similarity and the difference between insertion sort and selection sort. Smt Genap 2011-2012
25
A Lower Bound Bubble Sort, Selection Sort, Insertion Sort all have worst case of O(N 2 ). Turns out, for any algorithm that exchanges adjacent items, this is the best worst case: Ω (N 2 ) In other words, this is a lower bound! See proof in Section 8.3 of Weiss Smt Genap 2011-2012
26
Shell Sort: Idea Smt Genap 2011-2012 4021433650583424 Original: 5-sort: Sort items with distance 5 element: 4021433650583424 Donald Shell (1959): Exchange items that are far apart!
27
Shell Sort: Example Smt Genap 2011-2012 4021433650583424 Original: 4004334221583654 After 5-sort: 2031440342436558 After 3-sort: After 1-sort: 12340436504212334365058443654258404365
28
Shell Sort: Gap Values Gap: the distance between items being sorted. As we progress, the gap decreases. Shell Sort is also called Diminishing Gap Sort. Shell proposed starting gap of N/2, halving at each step. There are many ways of choosing the next gap. Smt Genap 2011-2012
29
Shell Sort: Analysis Smt Genap 2011-2012 O(N 3/2 )?O(N 5/4 )? O(N 7/6 )? So we have 3 nested loops, but Shell Sort is still better than Insertion Sort! Why?
30
Generic Sort So far we have methods to sort integers. What about Strings? Employees? Cookies? A new method for each class? No! In order to be sorted, objects should be comparable (less than, equal, greater than). Solution: ◦ use an interface that has a method to compare two objects. Remember: A class that implements an interface inherits the interface (method definitions) = interface inheritance, not implementation inheritance. Smt Genap 2011-2012
31
The Comparable Interface In Java, generic aspect of “comparable” is defined in an interface in package java.lang : public interface Comparable { public int compareTo (Object ob); } ◦ method compareTo returns: negative integer: the object (this) is smaller than the parameter ‘ob’ 0: the object is equal to the parameter ‘ob’ positive integer: the object (this) is greater than the parameter ‘ob’ Smt Genap 2011-2012
32
Interface: Example public class CircleComparable extends Circle implements Comparable { public CircleComparable (double r) {super (r);} public int compareTo (Object other) { CircleComparable otherCircle = (CircleComparable) other; if (radius < otherCircle.getRadius ()) return -1; else if (radius > otherCircle.getRadius ()) return 1; else return 0; } Smt Genap 2011-2012
33
Insertion Sort: Generic Sort Generic Insertion sort public static void insertionSort3 (Comparable[] a) { for (int ii = 1; ii < a.length; ii++) { Comparable temp = a[ii]; int jj = ii; while (( jj > 0) && (temp.compareTo (a[jj - 1]) < 0)) { a[jj] = a[jj - 1]; jj--; } a[jj] = temp; } Smt Genap 2011-2012
34
import java.util.*; public class SortCircle { public static void main (String args[]) { CircleComparable[] ling = new CircleComparable[20]; Random generator = new Random (); for (int ii = 0; ii < ling.length; ii++) { ling[ii] = new CircleComparable ( 1 + generator.nextInt (100)); System.out.print (ling[ii].getRadius () + " "); } System.out.println (); Sort.insertionSort3 (ling); for (int ii = 0; ii < ling.length; ii++) { System.out.print (ling[ii].getRadius () + " "); } System.out.println (); } Smt Genap 2011-2012
35
Other kinds of sort Merge Sort Quick Sort Heap sort. Postman sort / Radix Sort. etc. Smt Genap 2011-2012
36
Further Reading Weiss book, chapter 7: Sorting Algorithm Smt Genap 2011-2012
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.