Computer notes - Sorting

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

description

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

Transcript of Computer notes - Sorting

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