ds lect 23 -sorting
TRANSCRIPT
![Page 1: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/1.jpg)
Data Structures and Algorithms
Lecture __ : Sorting Algorithms
Original Author of the lecture slides: Dr. Sohail Aslam
![Page 2: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/2.jpg)
Sorting Integers
20 8 5 10 7
5 7 8 10 20
How to sort the integers in this array?
![Page 3: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/3.jpg)
Elementary Sorting Algorithms
Selection Sort
Insertion Sort
Bubble Sort
![Page 4: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/4.jpg)
Selection Sort
![Page 5: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/5.jpg)
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
![Page 6: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/6.jpg)
1 2 30
7 12 195a: 19
1 2 30
7 19 125a: 12
1 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
![Page 7: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/7.jpg)
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;
}
}
![Page 8: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/8.jpg)
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;
}
![Page 9: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/9.jpg)
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
![Page 10: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/10.jpg)
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
![Page 11: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/11.jpg)
Insertion Sort
![Page 12: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/12.jpg)
Commonly used by card players
As each card is picked up, it is placed into the proper
sequence in their hand
Divide the list into a sorted sublist and an unsorted sublist
In each pass, one or more pieces of data are removed
from the unsorted sublist and inserted into their correct
position in a sorted sublist
![Page 13: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/13.jpg)
Insertion Sort
Basic idea
Start 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.
… …
![Page 14: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/14.jpg)
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:
![Page 15: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/15.jpg)
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;}}
![Page 16: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/16.jpg)
Insertion Sort – iteration 1
1 2 30
12 5 719a:
1 2 30
19 5 719a:
count val pos
1 12 0
1 12 -1
1 2 30
5 719a: 1219
1 2 30
19 5 712a:
12
![Page 17: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/17.jpg)
Insertion Sort -- iteration 2
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
![Page 18: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/18.jpg)
Insertion Sort – iteration 3
1 2 30
12 19 75a:
count val pos
3 7 2
3 7 0
3 7 1
1 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:
![Page 19: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/19.jpg)
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)
![Page 20: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/20.jpg)
Bubble Sort
![Page 21: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/21.jpg)
Bubble Sort
Lighter bubbles rise to the top:
Repeat until done:
Compare adjacent pairs of items
If the pair of items are out of order, exchange them, and
continue with the next pair
If the pair is in order, ignore them and continue with the
next pair
![Page 22: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/22.jpg)
1 2 30
12 7 195a:
Bubble Sort -- Example
1 2 30
12 7 195a:
19 12 75
1 2 30
a:
12 19 75a:
1 2 30
5 12 719
1 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:
![Page 23: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/23.jpg)
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 < N-1; i++)
if ( arr[i] > arr[i+1] ) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
swapped = i;
}
}
}
}
![Page 24: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/24.jpg)
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)
![Page 25: Ds lect 23 -sorting](https://reader034.vdocument.in/reader034/viewer/2022042701/55a0d3591a28ab4c108b47e6/html5/thumbnails/25.jpg)
Summary
Insertion, Selection and Bubble sort:
Worst case time complexity is proportional to N2.
Best sorting routines are N log(N)