e lementary
play

E LEMENTARY S ORTING A LGORITHMS Acknowledgement: The course slides - PowerPoint PPT Presentation

BBM 202 - ALGORITHMS D EPT . OF C OMPUTER E NGINEERING E LEMENTARY S ORTING A LGORITHMS Acknowledgement: The course slides are adapted from the slides prepared by R. Sedgewick and K. Wayne of Princeton University. E LEMENTARY S ORTING


  1. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i min in final order remaining entries 35

  2. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i in final order remaining entries 36

  3. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i min in final order remaining entries 37

  4. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i min in final order remaining entries 38

  5. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i in final order remaining entries 39

  6. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i min in final order remaining entries 40

  7. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . i min in final order remaining entries 41

  8. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . in final order 42

  9. Selection sort • In iteration i , find index min of smallest remaining entry. • Swap a[i] and a[min] . sorted 43

  10. Selection sort: Java implementation public class Selection { public static void sort(Comparable[] a) { int N = a.length; for (int i = 0; i < N; i++) { int min = i; 
 for (int j = i+1; j < N; j++) if (less(a[j], a[min])) min = j; exch(a, i, min); } } private static boolean less(Comparable v, Comparable w) { /* as before */ } private static void exch(Comparable[] a, int i, int j) { /* as before */ } } 44

  11. Selection sort: mathematical analysis Proposition. Selection sort uses ( N – 1) + ( N – 2) + ... + 1 + 0 ~ N 2 / 2 compares and N exchanges. a[] entries in black i min 0 1 2 3 4 5 6 7 8 9 10 are examined to find the minimum S O R T E X A M P L E 0 6 S O R T E X A M P L E entries in red 1 4 A O R T E X S M P L E are a[min] 2 10 A E R T O X S M P L E 3 9 A E E T O X S M P L R 4 7 A E E L O X S M P T R 5 7 A E E L M X S O P T R 6 8 A E E L M O S X P T R 7 10 A E E L M O P X S T R 8 8 A E E L M O P R S T X entries in gray are 9 9 A E E L M O P R S T X in final position 10 10 A E E L M O P R S T X A E E L M O P R S T X Trace of selection sort (array contents just after each exchange) Running time insensitive to input. Quadratic time, even if input array is sorted. Data movement is minimal. Linear number of exchanges. 45

  12. Selection sort: animations 20 random items algorithm position in final order not in final order http://www.sorting-algorithms.com/selection-sort 46

  13. Selection sort: animations 20 partially-sorted items algorithm position in final order not in final order http://www.sorting-algorithms.com/selection-sort 47

  14. E LEMENTARY S ORTING A LGORITHMS ‣ Sorting review ‣ Rules of the game ‣ Selection sort ‣ Insertion sort ‣ Shellsort

  15. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. 49

  16. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i not yet seen 50

  17. Selection sort • In iteration i , swap a[i] with each larger entry to its left. j i in ascending order not yet seen 51

  18. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 52

  19. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i in ascending order not yet seen 53

  20. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 54

  21. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 55

  22. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 56

  23. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 57

  24. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 58

  25. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 59

  26. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 60

  27. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 61

  28. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 62

  29. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 63

  30. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 64

  31. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 65

  32. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 66

  33. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 67

  34. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 68

  35. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 69

  36. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 70

  37. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 71

  38. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 72

  39. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 73

  40. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 74

  41. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 75

  42. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 76

  43. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 77

  44. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 78

  45. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 79

  46. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 80

  47. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i not yet seen 81

  48. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. i in ascending order not yet seen 82

  49. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i 83

  50. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i 84

  51. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i 85

  52. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i 86

  53. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. j i 87

  54. Insertion sort • In iteration i , swap a[i] with each larger entry to its left. sorted 88

  55. Insertion sort: Java implementation public class Insertion { public static void sort(Comparable[] a) { int N = a.length; for (int i = 0; i < N; i++) for (int j = i; j > 0; j--) if (less(a[j], a[j-1])) exch(a, j, j-1); else break; } private static boolean less(Comparable v, Comparable w) { /* as before */ } private static void exch(Comparable[] a, int i, int j) { /* as before */ } } 89

  56. Insertion sort: mathematical analysis Proposition. To sort a randomly-ordered array with distinct keys, 
 insertion sort uses ~ ¼ N 2 compares and ~ ¼ N 2 exchanges on average. Pf. Expect each entry to move halfway back. a[] i j 0 1 2 3 4 5 6 7 8 9 10 S O R T E X A M P L E entries in gray do not move 1 0 O S R T E X A M P L E 2 1 O R S T E X A M P L E 3 3 O R S T E X A M P L E entry in red 4 0 E O R S T X A M P L E is a[j] 5 5 E O R S T X A M P L E 6 0 A E O R S T X M P L E 7 2 A E M O R S T X P L E entries in black 8 4 A E M O P R S T X L E moved one position right for insertion 9 2 A E L M O P R S T X E 10 2 A E E L M O P R S T X A E E L M O P R S T X Trace of insertion sort (array contents just after each insertion) 90

  57. Insertion sort: animation 40 random items algorithm position in order not yet seen http://www.sorting-algorithms.com/insertion-sort 91

  58. Insertion sort: best and worst case Best case. If the array is in ascending order, insertion sort makes 
 N - 1 compares and 0 exchanges. A E E L M O P R S T X Worst case. If the array is in descending order (and no duplicates), 
 insertion sort makes ~ ½ N 2 compares and ~ ½ N 2 exchanges. X T S R P O M L E E A 92

  59. Insertion sort: animation 40 reverse-sorted items algorithm position in order not yet seen http://www.sorting-algorithms.com/insertion-sort 93

  60. Insertion sort: partially-sorted arrays Def. An inversion is a pair of keys that are out of order. A E E L M O T R X P S • T-R T-P T-S R-P X-P X-S (6 inversions) Def. An array is partially sorted if the number of inversions is ≤ c N . • Ex 1. A subarray of size 10 appended to a sorted subarray of size N . • Ex 2. An array of size N with only 10 entries out of place. Proposition. For partially-sorted arrays, insertion sort runs in linear time. Pf. Number of exchanges equals the number of inversions. number of compares = exchanges + (N – 1) 94

  61. Insertion sort: animation 40 partially-sorted items algorithm position in order not yet seen http://www.sorting-algorithms.com/insertion-sort 95

  62. E LEMENTARY S ORTING A LGORITHMS ‣ Sorting review ‣ Rules of the game ‣ Selection sort ‣ Insertion sort ‣ Shellsort

  63. Shellsort overview Idea. Move entries more than one position at a time by h -sorting the array. an h-sorted array is h interleaved sorted subsequences h = 4 L E E A M H L E P S O L T S X R L M P T E H S S E L O X A E L R Shellsort. [Shell 1959] h -sort the array for decreasing seq. of values of h . input S H E L L S O R T E X A M P L E 13-sort P H E L L S O R T E X A M S L E 4-sort L E E A M H L E P S O L T S X R A E E E H L L L M O P R S S T X 1-sort 97

  64. h-sorting How to h -sort an array? Insertion sort, with stride length h . 3-sorting an array M O L E E X A S P R T E O L M E X A S P R T E E L M O X A S P R T E E L M O X A S P R T A E L E O X M S P R T A E L E O X M S P R T A E L E O P M S X R T A E L E O P M S X R T A E L E O P M S X R T A E L E O P M S X R T Why insertion sort? • Big increments ⇒ small subarray. • Small increments ⇒ nearly in order. [stay tuned] 98

  65. Shellsort example: increments 7, 3, 1 input 1-sort A E L E O P M S X R T S O R T E X A M P L E A E L E O P M S X R T A E L E O P M S X R T 7-sort A E E L O P M S X R T A E E L O P M S X R T S O R T E X A M P L E A E E L O P M S X R T M O R T E X A S P L E A E E L M O P S X R T M O R T E X A S P L E A E E L M O P S X R T M O L T E X A S P R E A E E L M O P S X R T M O L E E X A S P R T A E E L M O P R S X T A E E L M O P R S T X 3-sort M O L E E X A S P R T E O L M E X A S P R T result E E L M O X A S P R T A E E L M O P R S T X E E L M O X A S P R T A E L E O X M S P R T A E L E O X M S P R T A E L E O P M S X R T A E L E O P M S X R T A E L E O P M S X R T 99

  66. Shellsort: intuition Proposition. A g -sorted array remains g -sorted after h -sorting it. 7-sort 3-sort M O R T E X A S P L E M O L E E X A S P R T M O R T E X A S P L E E O L M E X A S P R T M O L T E X A S P R E E E L M O X A S P R T M O L E E X A S P R T E E L M O X A S P R T M O L E E X A S P R T A E L E O X M S P R T A E L E O X M S P R T A E L E O P M S X R T A E L E O P M S X R T A E L E O P M S X R T A E L E O P M S X R T still 7-sorted Challenge. Prove this fact — it's more subtle than you'd think! 100

Recommend


More recommend