bbm 202 - algorithms - hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · bbm 202 -...

107
BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT. OF COMPUTER ENGINEERING Acknowledgement: The course slides are adapted from the slides prepared by R. Sedgewick and K. Wayne of Princeton University.

Upload: others

Post on 04-Jun-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

BBM 202 - ALGORITHMS

ELEMENTARYSORTING ALGORITHMS

DEPT. OF COMPUTER ENGINEERING

Acknowledgement: The course slides are adapted from the slides prepared by R. Sedgewick and K. Wayne of Princeton University.

Page 2: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

ELEMENTARY SORTING ALGORITHMS

‣ Sorting review‣ Rules of the game‣ Selection sort‣ Insertion sort‣ Shellsort

Page 3: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

ELEMENTARY SORTING ALGORITHMS

‣ Sorting review‣ Rules of the game‣ Selection sort‣ Insertion sort‣ Shellsort

Page 4: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Ex. Student records in a university.

Sort. Rearrange array of N items into ascending order.

4

Sorting problem

item

key

Chen 3 A 991-878-4944 308 Blair

Rohde 2 A 232-343-5555 343 Forbes

Gazsi 4 B 766-093-9873 101 Brown

Furia 1 A 766-093-9873 101 Brown

Kanaga 3 B 898-122-9643 22 Brown

Andrews 3 A 664-480-0023 097 Little

Battle 4 C 874-088-1212 121 Whitman

Andrews 3 A 664-480-0023 097 Little

Battle 4 C 874-088-1212 121 Whitman

Chen 3 A 991-878-4944 308 Blair

Furia 1 A 766-093-9873 101 Brown

Gazsi 4 B 766-093-9873 101 Brown

Kanaga 3 B 898-122-9643 22 Brown

Rohde 2 A 232-343-5555 343 Forbes

Page 5: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Goal. Sort any type of data.Ex 1. Sort random real numbers in ascending order.

5

Sample sort client

% java Experiment 10 0.08614716385210452 0.09054270895414829 0.10708746304898642 0.21166190071646818 0.363292849257276 0.460954145685913 0.5340026311350087 0.7216129793703496 0.9003500354411443 0.9293994908845686

public class Experiment { public static void main(String[] args) { int N = Integer.parseInt(args[0]); Double[] a = new Double[N]; for (int i = 0; i < N; i++) a[i] = StdRandom.uniform(); Insertion.sort(a); for (int i = 0; i < N; i++) StdOut.println(a[i]); } }

seems artificial, but stay tuned for an application

Page 6: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Goal. Sort any type of data.Ex 2. Sort strings from file in alphabetical order.

6

Sample sort client

% more words3.txt bed bug dad yet zoo ... all bad yes

% java StringSorter words3.txt all bad bed bug dad ... yes yet zoo

public class StringSorter { public static void main(String[] args) { String[] a = In.readStrings(args[0]); Insertion.sort(a); for (int i = 0; i < a.length; i++) StdOut.println(a[i]); } }

Page 7: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Goal. Sort any type of data.Ex 3. Sort the files in a given directory by filename.

7

% java FileSorter . Insertion.class Insertion.java InsertionX.class InsertionX.java Selection.class Selection.java Shell.class Shell.java ShellX.class ShellX.java

Sample sort client

import java.io.File; public class FileSorter { public static void main(String[] args) { File directory = new File(args[0]); File[] files = directory.listFiles(); Insertion.sort(files); for (int i = 0; i < files.length; i++) StdOut.println(files[i].getName()); } }

Page 8: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

8

Callbacks

Goal. Sort any type of data.

Q. How can sort() know how to compare data of type Double, String, and java.io.File without any information about the type of an item's key?

Callback = reference to executable code.• Client passes array of objects to sort() function.

• The sort() function calls back object's compareTo() method as needed.

Implementing callbacks.• Java: interfaces.

• C: function pointers.

• C++: class-type functors.

• C#: delegates.

• Python, Perl, ML, Javascript: first-class functions.

Page 9: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Callbacks: roadmap

9

sort implementation

client object implementation

import java.io.File; public class FileSorter { public static void main(String[] args) { File directory = new File(args[0]); File[] files = directory.listFiles(); Insertion.sort(files); for (int i = 0; i < files.length; i++) StdOut.println(files[i].getName()); } }

key point: no dependence on File data type

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 (a[j].compareTo(a[j-1]) < 0) exch(a, j, j-1); else break; }

public class File implements Comparable<File> { ... public int compareTo(File b) { ... return -1; ... return +1; ... return 0; } }

Comparable interface (built in to Java)

public interface Comparable<Item> { public int compareTo(Item that); }

Page 10: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

A total order is a binary relation ≤ that satisfies

• Antisymmetry: if v ≤ w and w ≤ v, then v = w.

• Transitivity: if v ≤ w and w ≤ x, then v ≤ x.

• Totality: either v ≤ w or w ≤ v or both.

Ex.• Standard order for natural and real numbers.

• Alphabetical order for strings.

• Chronological order for dates.

• ...

10

Total order

an intransitive relation

Page 11: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Implement compareTo() so that v.compareTo(w)• Is a total order.

• Returns a negative integer, zero, or positive integer if v is less than, equal to, or greater than w, respectively.

• Throws an exception if incompatible types (or either is null).

Built-in comparable types. Integer, Double, String, Date, File, ...User-defined comparable types. Implement the Comparable interface.

11

Comparable API

less than (return -1) equal to (return 0) greater than (return +1)

v

w vw

v w

Page 12: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Date data type. Simplified version of java.util.Date.

public class Date implements Comparable<Date>{ private final int month, day, year;

public Date(int m, int d, int y) { month = m; day = d; year = y; }

public int compareTo(Date that) { if (this.year < that.year ) return -1; if (this.year > that.year ) return +1; if (this.month < that.month) return -1; if (this.month > that.month) return +1; if (this.day < that.day ) return -1; if (this.day > that.day ) return +1; return 0; } }

12

Implementing the Comparable interface

only compare datesto other dates

Page 13: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Helper functions. Refer to data through compares and exchanges.

Less. Is item v less than w ?

Exchange. Swap item in array a[] at index i with the one at index j.

13

Two useful sorting abstractions

private static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; }

private static void exch(Comparable[] a, int i, int j) { Comparable swap = a[i]; a[i] = a[j]; a[j] = swap; }

Page 14: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

ELEMENTARY SORTING ALGORITHMS

‣ Sorting review‣ Rules of the game‣ Selection sort‣ Insertion sort‣ Shellsort

Page 15: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

15

remaining entries

i

Page 16: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

16

i min

remaining entries

Page 17: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

17

i min

remaining entries

Page 18: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

18

remaining entriesin final order

i

Page 19: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

19

remaining entries

i min

in final order

Page 20: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

20

in final order remaining entries

i min

Page 21: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

21

remaining entriesin final order

i

Page 22: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

22

remaining entries

i min

in final order

Page 23: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

23

in final order remaining entries

i min

Page 24: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

24

remaining entriesin final order

i

Page 25: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

25

remaining entries

i min

in final order

Page 26: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

26

in final order remaining entries

i min

Page 27: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

27

in final order remaining entries

i

Page 28: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

28

in final order remaining entries

i min

Page 29: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

29

in final order remaining entries

i min

Page 30: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

30

in final order remaining entries

i

Page 31: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

31

in final order remaining entries

i min

Page 32: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

32

in final order remaining entries

i min

Page 33: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

33

in final order remaining entries

i

Page 34: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

34

in final order remaining entries

i min

Page 35: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

35

in final order remaining entries

i min

Page 36: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

36

in final order remaining entries

i

Page 37: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

37

in final order remaining entries

i min

Page 38: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

38

in final order remaining entries

i min

Page 39: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

39

in final order remaining entries

i

Page 40: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

40

in final order remaining entries

i min

Page 41: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

41

in final order remaining entries

i min

Page 42: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

42

in final order

Page 43: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

• In iteration i, find index min of smallest remaining entry.

• Swap a[i] and a[min].

Selection sort

43

sorted

Page 44: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

44

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 */ } }

Page 45: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Selection sort: mathematical analysis

Proposition. Selection sort uses (N – 1) + (N – 2) + ... + 1 + 0 ~ N 2 / 2

compares and N exchanges.

Running time insensitive to input. Quadratic time, even if input array is sorted.Data movement is minimal. Linear number of exchanges.

45

Trace of selection sort (array contents just after each exchange)

a[] i min 0 1 2 3 4 5 6 7 8 9 10

S O R T E X A M P L E

0 6 S O R T E X A M P L E 1 4 A O R T E X S M P L E 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 9 9 A E E L M O P R S T X 10 10 A E E L M O P R S T X

A E E L M O P R S T X

entries in gray arein final position

entries in blackare examined to find

the minimum

entries in redare a[min]

Page 46: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Selection sort: animations

46

http://www.sorting-algorithms.com/selection-sort

20 random items

in final ordernot in final order

algorithm position

Page 47: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Selection sort: animations

47

in final ordernot in final order

algorithm position

http://www.sorting-algorithms.com/selection-sort

20 partially-sorted items

Page 48: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

ELEMENTARY SORTING ALGORITHMS

‣ Sorting review‣ Rules of the game‣ Selection sort‣ Insertion sort‣ Shellsort

Page 49: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

49

Page 50: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

50

i

not yet seen

Page 51: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Selection sort

51

in ascending order not yet seen

ij

Page 52: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

52

i

not yet seen

j

Page 53: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

53

not yet seenin ascending order

ij

Page 54: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

54

i

not yet seen

j

Page 55: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

55

i

not yet seen

j

Page 56: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

56

i

not yet seen

j

Page 57: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

57

i

not yet seenin ascending order

Page 58: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

58

i

not yet seen

j

Page 59: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

59

i

not yet seen

j

Page 60: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

60

i

not yet seen

j

Page 61: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

61

i

not yet seen

j

Page 62: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

62

i

not yet seenin ascending order

Page 63: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

63

i

not yet seen

j

Page 64: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

64

i

not yet seen

j

Page 65: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

65

i

not yet seenin ascending order

Page 66: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

66

i

not yet seen

j

Page 67: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

67

i

not yet seen

j

Page 68: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

68

i

not yet seen

j

Page 69: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

69

i

not yet seen

j

Page 70: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

70

i

not yet seen

j

Page 71: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

71

i

not yet seenin ascending order

Page 72: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

72

i

not yet seen

j

Page 73: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

73

i

not yet seen

j

Page 74: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

74

i

not yet seen

j

Page 75: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

75

i

not yet seen

j

Page 76: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

76

i

not yet seen

j

Page 77: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

77

i

not yet seen

j

Page 78: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

78

i

not yet seen

j

Page 79: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

79

i

not yet seenin ascending order

Page 80: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

80

i

not yet seen

j

Page 81: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

81

i

not yet seen

j

Page 82: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

82

i

not yet seenin ascending order

Page 83: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

83

ij

Page 84: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

84

ij

Page 85: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

85

ij

Page 86: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

86

ij

Page 87: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

87

ij

Page 88: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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

Insertion sort

88

sorted

Page 89: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Insertion sort: Java implementation

89

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 */ } }

Page 90: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

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.

Insertion sort: mathematical analysis

90

Trace of insertion sort (array contents just after each insertion)

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

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 4 0 E O R S T X A M P L E 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 8 4 A E M O P R S T X L E 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

entries in blackmoved one positionright for insertion

entries in graydo not move

entry in red is a[j]

Page 91: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Insertion sort: animation

91

in ordernot yet seen

algorithm position

http://www.sorting-algorithms.com/insertion-sort

40 random items

Page 92: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Best case. If the array is in ascending order, insertion sort makesN - 1 compares and 0 exchanges.

Worst case. If the array is in descending order (and no duplicates), insertion sort makes ~ ½ N 2 compares and ~ ½ N 2 exchanges.

Insertion sort: best and worst case

92

X T S R P O M L E E A

A E E L M O P R S T X

Page 93: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Insertion sort: animation

93

http://www.sorting-algorithms.com/insertion-sort

40 reverse-sorted items

in ordernot yet seen

algorithm position

Page 94: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Def. An inversion is a pair of keys that are out of order.

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.

Insertion sort: partially-sorted arrays

94

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)

number of compares = exchanges + (N – 1)

Page 95: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Insertion sort: animation

95

http://www.sorting-algorithms.com/insertion-sort

40 partially-sorted items

in ordernot yet seen

algorithm position

Page 96: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

ELEMENTARY SORTING ALGORITHMS

‣ Sorting review‣ Rules of the game‣ Selection sort‣ Insertion sort‣ Shellsort

Page 97: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Idea. Move entries more than one position at a time by h-sorting the array.

Shellsort. [Shell 1959] h-sort the array for decreasing seq. of values of h.

Shellsort overview

an h-sorted array is h interleaved sorted subsequences

97

L E E A M H L E P S O L T S X RL M P T E H S S E L O X A E L R

P H E L L S O R T E X A M S L EP S H L E E L L

h = 4

h = 13

An h-sorted file is h interleaved sorted files

(8 additional files of size 1)

Shellsort trace (array contents after each pass)

P H E L L S O R T E X A M S L E

A E E E H L L L M O P R S S T X

L E E A M H L E P S O L T S X R

S H E L L S O R T E X A M P L Einput

13-sort

4-sort

1-sort

Page 98: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

How to h-sort an array? Insertion sort, with stride length h.

Why insertion sort?

• Big increments ⇒ small subarray.

• Small increments ⇒ nearly in order. [stay tuned]

h-sorting

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

3-sorting an array

98

Page 99: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Shellsort example: increments 7, 3, 1

S O R T E X A M P L E

input

S O R T E X A M P L E M O R T E X A S P L E M O R T E X A S P L E M O L T E X A S P R E M O L E E X A S P R T

7-sort

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

3-sort

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 E L O P M S X R T A E E L O P M S X R T A E E L O P M S X R T A E E L M O P S X R T A E E L M O P S X R T A E E L M O P S X R T A E E L M O P R S X T A E E L M O P R S T X

1-sort

A E E L M O P R S T X

result

99

Page 100: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

100

Shellsort: intuition

Proposition. A g-sorted array remains g-sorted after h-sorting it.

Challenge. Prove this fact—it's more subtle than you'd think!

M O R T E X A S P L E M O R T E X A S P L E M O L T E X A S P R E M O L E E X A S P R T M O L E E X A S P R T

7-sort

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

3-sort

still 7-sorted

Page 101: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Shellsort: which increment sequence to use?

Powers of two. 1, 2, 4, 8, 16, 32, ... No.

Powers of two minus one. 1, 3, 7, 15, 31, 63, ...Maybe.

3x + 1. 1, 4, 13, 40, 121, 364, ...OK. Easy to compute.

Sedgewick. 1, 5, 19, 41, 109, 209, 505, 929, 2161, 3905, ...Good. Tough to beat in empirical studies.=Interested in learning more?• See Section 6.8 of Algs, 3rd edition or Volume 3 of Knuth for details.

• Do a JP on the topic.

101

merging of (9 ⨉ 4i) – (9 ⨉ 2i) + 1 and 4i – (3 ⨉ 2i) + 1

Page 102: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

public class Shell { public static void sort(Comparable[] a) { int N = a.length;

int h = 1; while (h < N/3) h = 3*h + 1; // 1, 4, 13, 40, 121, 364, 1093, ...

while (h >= 1) { // h-sort the array. for (int i = h; i < N; i++) { for (int j = i; j >= h && less(a[j], a[j-h]); j -= h) exch(a, j, j-h); } h = h/3; } }

private static boolean less(Comparable v, Comparable w) { /* as before */ } private static boolean void(Comparable[] a, int i, int j) { /* as before */ } }

Shellsort: Java implementation

102

insertion sort

3x+1 increment sequence

move to nextincrement

Page 103: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Shellsort: visual trace

103Visual trace of shellsort

input

40-sorted

13-sorted

4-sorted

result

Page 104: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Shellsort: animation

104

h-sortedcurrent subsequence

algorithm position

50 random items

other elementshttp://www.sorting-algorithms.com/shell-sort

Page 105: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Shellsort: animation

105

http://www.sorting-algorithms.com/shell-sort

50 partially-sorted items

h-sortedcurrent subsequence

algorithm position

other elements

Page 106: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Proposition. The worst-case number of compares used by shellsort with the 3x+1 increments is O(N 3/2).

Property. The number of compares used by shellsort with the 3x+1 increments is at most by a small multiple of N times the # of increments

used.

Remark. Accurate model has not yet been discovered (!) 106

Shellsort: analysis

measured in thousands

N compares N1.289 2.5 N lg N

5.000 93 58 106

10.000 209 143 230

20.000 467 349 495

40.000 1022 855 1059

80.000 2266 2089 2257

Page 107: BBM 202 - ALGORITHMS - Hacettepe Üniversitesibbm202/slides/03-elementary-sortin… · BBM 202 - ALGORITHMS ELEMENTARY SORTING ALGORITHMS DEPT.OF COMPUTER ENGINEERING Acknowledgement:

Why are we interested in shellsort?

Example of simple idea leading to substantial performance gains.

Useful in practice.• Fast unless array size is huge.

• Tiny, fixed footprint for code (used in embedded systems).

• Hardware sort prototype.

Simple algorithm, nontrivial performance, interesting questions.• Asymptotic growth rate?

• Best sequence of increments?

• Average-case performance?

Lesson. Some good algorithms are still waiting discovery.

107

open problem: find a better increment sequence