Top Banner
Class No.38 Data Structures http://ecomputernotes. com
26

Computer notes - Sorting

Nov 20, 2014

Download

Education

ecomputernotes

Selection Sort, Insertion Sort, Bubble Sort Main idea: find the smallest element put it in the first position find the next smallest element put it in the second position
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Computer notes  - Sorting

Class No.38

Data Structures

http://ecomputernotes.com

Page 2: Computer notes  - Sorting

Sorting

http://ecomputernotes.com

Page 3: Computer notes  - Sorting

Sorting Integers

20 8 5 10 7

5 7 8 10 20

How to sort the integers in this array?

http://ecomputernotes.com

Page 4: Computer notes  - Sorting

Elementary Sorting Algorithms

Selection Sort Insertion Sort Bubble Sort

http://ecomputernotes.com

Page 5: Computer notes  - Sorting

Selection Sort

Main idea:• find the smallest element • put it in the first position• find the next smallest element• put it in the second position• …

And so on, until you get to the end of the list

http://ecomputernotes.com

Page 6: Computer notes  - Sorting

1 2 30

7 12 195a: 191 2 30

7 19 125a: 121 2 30

19 7 125a: 7

Selection Sort -- Example

1 2 30

7 12 195a:

1 2 30

5 7 1219a:a:1 2 30

5

http://ecomputernotes.com

Page 7: Computer notes  - Sorting

Selection Sort: Code

void selectionSort(int *arr, int N){ int posmin, count, tmp; for(count=0;count<N;count++) { posmin = findIndexMin(arr,count,N);

tmp=arr[posmin]; arr[posmin]=arr[count]; arr[count]=tmp; }}

http://ecomputernotes.com

Page 8: Computer notes  - Sorting

Selection Sort: Code

int findIndexMin(int *arr, int start,int N)

{ int posmin=start; int index; for(index=start; index < N; index++) if (arr[index]<arr[posmin])

posmin=index;

return posmin;}

http://ecomputernotes.com

Page 9: Computer notes  - Sorting

Swap Action (SelectionSorting)

5 8 20 10 7

5 7 20 10 8

5 7 8 10 20

20 8 5 10 7

5 7 8 10 20

http://ecomputernotes.com

Page 10: Computer notes  - Sorting

Selection Sort Analysis

What is the time complexity of this algorithm? Worst case == Best case == Average case Each iteration performs a linear search on the

rest of the array• first element N +• second element N-1 + • …• penultimate element 2 +• last element 1• Total N(N+1)/2

= (N2+N)/2

http://ecomputernotes.com

Page 11: Computer notes  - Sorting

Insertion Sort

Basic idea (sorting cards):• Starts by considering the first two elements

of the array data, if out of order, swap them

• Consider the third element, insert it into the proper position among the first three elements.

• Consider the forth element, insert it into the proper position among the first four elements.

• … …

http://ecomputernotes.com

Page 12: Computer notes  - Sorting

Insertion Sort -- Example

1 2 30

12 5 719a:

1 2 30

19 5 712a:

1 2 30

12 19 75a:

1 2 30

7 12 195a:http://ecomputernotes.com

Page 13: Computer notes  - Sorting

Insertion Sort: Code

void insertionSort(int *arr, int N){ int pos, count, val; for(count=1; count < N; count++) { val = arr[count];

for(pos=count-1; pos >= 0; pos--) if (arr[pos] > val) arr[pos+1]=arr[pos]; else break;

arr[pos+1] = val; }} http://ecomputernotes.com

Page 14: Computer notes  - Sorting

Insertion Sort -- animation

1 2 30

12 5 719a:

1 2 30

19 5 719a:

count val pos

1 12 0

1 12 -11 2 30

5 719a: 1219

1 2 30

19 5 712a:

12

http://ecomputernotes.com

Page 15: Computer notes  - Sorting

Insertion Sort -- animation (cont)

1 2 30

12 19 75a:

count val pos

2 5 1

2 5 -1

1 2 30

19 5 712a:

1 2 30

5 712a: 19 19

1 2 30

19 712a: 1912

2 5 0

1 2 30

12 19 712a: 5

http://ecomputernotes.com

Page 16: Computer notes  - Sorting

Insertion Sort -- animation (cont)

1 2 30

12 19 75a:

count val pos

3 7 2

3 7 0

3 7 11 2 30

12 19 75a: 19

1 2 30

12 19 195a: 12

1 2 30

12 12 195a: 7

1 2 30

7 12 195a:http://ecomputernotes.com

Page 17: Computer notes  - Sorting

Insertion Sort Analysis

What is the time complexity of this algorithm? Worst case > Average case > Best case Each iteration inserts an element at the start of

the array, shifting all sorted elements along

• second element 2 +

• …

• penultimate element N-1 +

• last element N

• Total (2+N)(N-1)/2 = O(N2)

http://ecomputernotes.com

Page 18: Computer notes  - Sorting

Bubble Sort

Basic idea (lighter bubbles rise to the top):• Exchange neighbouring items until the largest

item reaches the end of the array• Repeat for the rest of the array

http://ecomputernotes.com

Page 19: Computer notes  - Sorting

1 2 30

12 7 195a:

Bubble Sort -- Example

1 2 30

12 7 195a:

19 12 751 2 30

a:

12 19 75a:

1 2 30

5 12 7191 2 30

a: a:

1 2 30

12 7 195a:

1 2 30

7 12 195a:

1 2 30

7 12 195a:

1 2 30

7 12 195a:

1 2 30

7 12 195a:http://ecomputernotes.com

Page 20: Computer notes  - Sorting

Bubble Sort: Code

void bubbleSort(int *arr, int N){ int i, temp, bound = N-1; int swapped = 1; while (swapped > 0 ) { swapped = 0; for(i=0; I < bound; i++) if ( arr[i] > arr[i+1] ) {

temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; swapped = i; } bound = swapped; }}

http://ecomputernotes.com

Page 21: Computer notes  - Sorting

Bubble Sort Analysis

What is the time complexity of this algorithm?

Worst case > Average case > Best case Each iteration compares all the adjacent

elements, swapping them if necessary• first iteration N +

• second iteration N-1 +

• …

• last iteration 1

• Total N(1+N)/2 = O(N2)http://ecomputernotes.com

Page 22: Computer notes  - Sorting

Summary

Insertion, Selection and Bubble sort: • Worst case time complexity is

proportional to N2.

Best sorting routines are N log(N)

http://ecomputernotes.com

Page 23: Computer notes  - Sorting

NLogN Algorithms

Divide and Conquer Merge Sort Quick Sort Heap Sort

http://ecomputernotes.com

Page 24: Computer notes  - Sorting

Divide and Conquer

What if we split the list into two parts?

10 12 8 4 2 11 7 510 12 8 4 2 11 7 5

http://ecomputernotes.com

Page 25: Computer notes  - Sorting

Divide and Conquer

Sort the two parts:

10 12 8 4 2 11 7 54 8 10 12 2 5 7 11

http://ecomputernotes.com

Page 26: Computer notes  - Sorting

Divide and Conquer

Then merge the two parts together:

4 8 10 12 2 5 7 112 4 5 7 8 10 11 12

http://ecomputernotes.com