sorting algorithms and analysis robert duncan. refresher on big-o o(2^n)exponential ...

Post on 22-Dec-2015

228 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Sorting

Algorithms and Analysis

Robert Duncan

Refresher on Big-ORefresher on Big-O

O(2^N) ExponentialO(N^2) QuadraticO(N log N) Linear/LogO(N) LinearO(log N) LogO(1) Constant

Hierarchy of Big-O functions from slowest to fastest

Generic running times Generic running times

N O(log N) O(N) O(N log N) O(N^2) O(2^N)

1 0 1 0 1 2

8 3 8 24 64 256

128 7 128 896 16384 3.4x10^38

1024 10 1024 10240 1048576 1.8x10^308

O(N log N) vs. O(N^2)O(N log N) vs. O(N^2)

0

5000

10000

15000

20000

0 1000

O(N log N) O(N^2)

Two Common CategoriesTwo Common Categories

Sorting Algorithms of O(N^2)

Bubble SortSelection SortInsertion Sort

Sorting Algorithms of

O(N log N)Heap SortMerge SortQuick Sort

For small values of NFor small values of N

It is important to note that all algorithms appear to run equally as fast for small values of N.

For values of N from the thousands to the millions, The differences between O(N^2) and O(N log N) become dramatically apparent

O(N^2) SortsO(N^2) Sorts

Easy to program

Simple to understand

Very slow, especially for large values of N

Almost never used in professional software

Bubble SortBubble Sort

The most inefficient of the O(n^2) algorithms

Simplest sorting algorithm available

Works by comparing sequential items, and swapping them if the first one is larger than the second. It makes as many passes through an array as are needed to complete the sort

Bubble Sort – Pass 1

2

3

6

4

1

5

2

3

6

4

1

5

2

3

4

6

1

5

2

3

4

1

6

5

2

3

4

1

5

6

Bubble Sort – Pass 2

2

3

4

1

5

6

2

3

4

1

5

6

2

3

1

4

5

6

2

3

1

4

5

6

2

3

1

4

5

6

Bubble Sort – Pass 3

2

3

1

4

5

6

2

1

3

4

5

6

2

1

3

4

5

6

2

1

3

4

5

6

2

1

3

4

5

6

Bubble Sort – Pass 4

1

2

3

4

5

6

1

2

3

4

5

6

1

2

3

4

5

6

1

2

3

4

5

6

1

2

3

4

5

6

Selection SortSelection Sort

More efficient than Bubble Sort, but not as efficient as Insertion Sort

Works by finding the largest element in the list and swapping it with the last element, effectively reducing the size of the list by 1.

Selection Sort – Pass 1-3

6 8 10 2 4

6 8 4 2 10

6 2 4 8 10

Selection Sort – Pass 4-5

4 2 6 8 10

2 4 6 8 10

2 4 6 8 10

Insertion SortInsertion Sort

One of the most efficient of the O(n^2) algorithms

Roughly twice as fast as bubble sort

Works by taking items from unsorted list and inserting them into the proper place.

Insertion Sort

22

22 35

22 35 48

Insertion Sort

13 22 35 48

8 13 22 35 48

8 13 22 27 35 48

O(N log N) SortsO(N log N) SortsFastEfficientComplicated, not easy to understandMost make extensive use of recursion and

complex data structures

Heap SortHeap Sort

Slowest O(N log N) algorithm.

Although the slowest of the O(N log N) algorithms, it has less memory demands than Merge and Quick sort.

Heap SortHeap Sort

Works by transferring items to a heap, which is basically a binary tree in which all parent nodes have greater values than their child nodes. The root of the tree, which is the largest item, is transferred to a new array and then the heap is reformed. The process is repeated until the sort is complete.

Forming the heap from an unsorted array

Forming the heap from an unsorted array

11 26 14 2 19 32 7

32

214711

1926

Populating the new arrayPopulating the new array

32

214711

1926

Reforming the heapReforming the heap

32

19

2711

1426

Reforming the heapReforming the heap

32

26

2711

1419

Repeat the processRepeat the process

32 26

2711

1419

Repeat the processRepeat the process

32 26

14

711

219

Repeat the processRepeat the process

32 26

19

711

214

Repeat the processRepeat the process

32 26 19

711

214

Merge SortMerge SortUses recursion. Slightly faster than heap, but

uses twice as much memory from the 2nd array.

Sometimes called “divide and conquer” sort.

Works by recursively splitting an array into two equal halves, sorting the items, then re-merging them back into a new array.

11 26 14 2 32 18 7 21

32 18 7 2111 26 14 2

11 26 14 2 32 18 7 21

11 26 2 14 18 32 7 21

18 32 7 2111 26 2 14

11 26 2 14 18 32 7 21

7 18 21 322 11 14 26

2 11 14 26 7 18 21 32

7 18 21 322 11 14 26

2 11 14 26 7 18 21 32

2 7 11 14 18 21 26 32

Quick SortQuick Sort

The most efficient O(N log N) algorithm available

Works by first randomly choosing a pivot point which is hopefully a median element in the array. All elements less than the pivot are transferred to a new array, and all elements greater are transferred to a second array.

Quick SortQuick Sort

These new arrays are recursively quick sorted until they have been split down to a single element. The sorted elements smaller than the pivot are placed in a new array, then the pivot is placed after, and finally the elements greater than the pivot. These elements are now sorted.

Quick SortQuick Sort

Note: Although it is the quickest sorting algorithm, a badly chosen pivot may cause Quick Sort to run at O(N^2).

Different versions of quick sort address this problem in different ways.

For example, one way is to randomly choose 3 elements, then use the median element as the pivot.

11 26 14 2 32 18 7 21 5

Pivot

11 26 14 2 32 18 7 21 5

11 2 7 5

Pivot

11 2 7 5

Pivot

11 26 14 2 32 18 7 21 5

11 26 14 2 32 18 7 21 5

11 2 7 5

2 5

Pivot

11 26 14 2 32 18 7 21 5

2 5 711 2 7 5

2 5 2 5

Pivot

11 26 14 2 32 18 7 21 5

2 5 7 1111 2 7 5

2 5 2 5

What’s the pointWhat’s the point

Binary Searching Binary Searching Binary searches achieve O(log N) efficiency on

sorted dataSimilar to High-Low gameEach execution eliminates half of the elements

to search forAlthough hashing offers a quicker search of

O(1), binary searches are simpler, and use much less memory.

Binary SearchingBinary Searching

2 7 11 14 16 23 26 29 32 37 43

14?

Binary SearchingBinary Searching

2 7 11 14 16 23 26 29 32 37 43

14?

Binary SearchingBinary Searching

2 7 11 14 16 23 26 29 32 37 43

14

Conclusion…Conclusion…O(N^2) algorithms are almost never

used in professional software

Quick sort is generally considered to be the best overall sorting algorithm currently available.

top related