ds lect 24 -sorting - ii
TRANSCRIPT
![Page 1: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/1.jpg)
Data Structures and Algorithms
Lecture __ : Sorting Algorithms
Original Author of the lecture slides: Dr. Sohail Aslam
![Page 2: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/2.jpg)
Sorting Algorithms:
Divide and Conquer Strategy
Merge Sort
Quick Sort
![Page 3: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/3.jpg)
Divide and Conquer Strategy
What if we split the list into two parts?
10 12 8 4 2 11 7 510 12 8 4 2 11 7 5
![Page 4: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/4.jpg)
Divide and Conquer
Sort the two parts:
10 12 8 4 2 11 7 54 8 10 12 2 5 7 11
![Page 5: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/5.jpg)
Divide and Conquer
Then merge the two parts together:
4 8 10 12 2 5 7 112 4 5 7 8 10 11 12
![Page 6: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/6.jpg)
Analysis
To sort the halves (n/2)2+(n/2)2
To merge the two halves n
So, for n=100, divide and conquer takes:
= (100/2)2 + (100/2)2 + 100
= 2500 + 2500 + 100
= 5100 (n2 = 10,000)
![Page 7: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/7.jpg)
Divide and Conquer
Why not divide the halves in half?
The quarters in half?
And so on . . .
When should we stop?
At n = 1
![Page 8: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/8.jpg)
Search
Divide and Conquer
Search
Search
Recall: Binary Search
![Page 9: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/9.jpg)
Sort
Divide and Conquer
Sort Sort
Sort Sort Sort Sort
![Page 10: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/10.jpg)
Divide and Conquer
Combine
Combine Combine
![Page 11: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/11.jpg)
Merge Sort
![Page 12: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/12.jpg)
Mergesort
Mergesort is a divide and conquer algorithm that
does exactly that.
It splits the list in half
Mergesorts the two halves
Then merges the two sorted halves together
Mergesort can be implemented recursively
![Page 13: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/13.jpg)
Mergesort
The mergesort algorithm involves three steps:
If the number of items to sort is 0 or 1, return
Recursively sort the first and second halves
separately
Merge the two sorted halves into a sorted
group
![Page 14: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/14.jpg)
Merging: animation
4 8 10 12 2 5 7 11
2
![Page 15: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/15.jpg)
Merging: animation
4 8 10 12 2 5 7 11
2 4
![Page 16: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/16.jpg)
Merging: animation
4 8 10 12 2 5 7 11
2 4 5
![Page 17: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/17.jpg)
Merging
4 8 10 12 2 5 7 11
2 4 5 7
![Page 18: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/18.jpg)
Mergesort
8 12 11 2 7 5410
Split the list in half.
8 12410
Mergesort the left half.
Split the list in half. Mergesort the left half.
410
Split the list in half. Mergesort the left half.
10
Mergesort the right.
4
![Page 19: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/19.jpg)
Mergesort
8 12 11 2 7 5410
8 12410
410
Mergesort the right half.
Merge the two halves.
104 8 12
128
Merge the two halves.
88 12
![Page 20: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/20.jpg)
Mergesort
8 12 11 2 7 5410
8 12410
Merge the two halves.
410
Mergesort the right half. Merge the two halves.
104 8 12
10 1284
104 8 12
![Page 21: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/21.jpg)
Mergesort
10 12 11 2 7 584
Mergesort the right half.
11 2 7 5
11 2
11 2
![Page 22: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/22.jpg)
Mergesort
10 12 11 2 7 584
Mergesort the right half.
11 2 7 5
11 22 11
2 11
![Page 23: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/23.jpg)
Mergesort
10 12 11 2 7 584
Mergesort the right half.
11 2 7 52 11
75
7 5
![Page 24: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/24.jpg)
Mergesort
10 12 11 2 7 584
Mergesort the right half.
11 2 572 11
![Page 25: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/25.jpg)
Mergesort
10 12 2 5 7 1184
Mergesort the right half.
![Page 26: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/26.jpg)
Mergesort
5 7 8 10 11 1242
Merge the two halves.
![Page 27: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/27.jpg)
void mergeSort(float array[], int size)
{
int* tmpArrayPtr = new int[size];
if (tmpArrayPtr != NULL)
mergeSortRec(array, size, tmpArrayPtr);
else
{
cout << “Not enough memory to sort list.\n”);
return;
}
delete [] tmpArrayPtr;
}
Mergesort
![Page 28: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/28.jpg)
void mergeSortRec(int array[],int size,int tmp[])
{
int i;
int mid = size/2;
if (size > 1){
mergeSortRec(array, mid, tmp);
mergeSortRec(array+mid, size-mid, tmp);
mergeArrays(array, mid, array+mid, size-mid,
tmp);
for (i = 0; i < size; i++)
array[i] = tmp[i];
}
}
Mergesort
![Page 29: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/29.jpg)
3 5 15 28 30 6 10 14 22 43 50a: b:
aSize: 5 bSize: 6
mergeArrays
tmp:
![Page 30: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/30.jpg)
mergeArrays
5 15 28 30 10 14 22 43 50a: b:
tmp:
i=0
k=0
j=0
3 6
![Page 31: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/31.jpg)
mergeArrays
5 15 28 30 10 14 22 43 50a: b:
tmp:
i=0
k=0
3
j=0
3 6
![Page 32: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/32.jpg)
mergeArrays
3 15 28 30 10 14 22 43 50a: b:
tmp:
i=1 j=0
k=1
3 5
5 6
![Page 33: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/33.jpg)
mergeArrays
3 5 28 30 10 14 22 43 50a: b:
3 5tmp:
i=2 j=0
k=2
6
15 6
![Page 34: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/34.jpg)
mergeArrays
3 5 28 30 6 14 22 43 50a: b:
3 5 6tmp:
i=2 j=1
k=3
15 10
10
![Page 35: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/35.jpg)
10
mergeArrays
3 5 28 30 6 22 43 50a: b:
3 5 6tmp:
i=2 j=2
k=4
15 10 14
14
![Page 36: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/36.jpg)
1410
mergeArrays
3 5 28 30 6 14 43 50a: b:
3 5 6tmp:
i=2 j=3
k=5
15 10 22
15
![Page 37: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/37.jpg)
1410
mergeArrays
3 5 30 6 14 43 50a: b:
3 5 6tmp:
i=3 j=3
k=6
15 10 22
2215
28
![Page 38: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/38.jpg)
1410
mergeArrays
3 5 30 6 14 50a: b:
3 5 6tmp:
i=3 j=4
k=7
15 10 22
2815
28 43
22
![Page 39: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/39.jpg)
1410
mergeArrays
3 5 6 14 50a: b:
3 5 6tmp:
i=4 j=4
k=8
15 10 22
3015
28 43
22
30
28
![Page 40: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/40.jpg)
1410
mergeArrays
3 5 6 14 50a: b:
3 5 6 30tmp:
i=5 j=4
k=9
15 10 22
15
28 43
22
30
28 43 50
Done.
![Page 41: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/41.jpg)
Merge Sort and Linked Lists
Sort Sort
Merge
![Page 42: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/42.jpg)
Mergesort Analysis
Merging the two lists of size n/2:
O(n)
Merging the four lists of size n/4:
O(n).
.
.Merging the n lists of size 1:
O(n)
O (lg n)times
![Page 43: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/43.jpg)
Mergesort Analysis
Mergesort is O(n lg n)
Space?
The other sorts we have looked at (insertion,
selection) are in-place (only require a constant
amount of extra space)
Mergesort requires O(n) extra space for merging
![Page 44: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/44.jpg)
Quick Sort
![Page 45: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/45.jpg)
Quicksort
Quicksort is another divide and conquer algorithm
based on the idea of partitioning (splitting) the list
around a pivot or split value
![Page 46: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/46.jpg)
Quicksort
First the list is partitioned around a pivot value. Pivot can be chosen from the beginning, end or middle of list):
8 32 11 754 10124 5
5
pivot value
![Page 47: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/47.jpg)
Quicksort
The pivot is swapped to the last position and the remaining elements are compared starting at theends.
8 3 2 11 7 54 10124 5
low high
5
pivot value
![Page 48: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/48.jpg)
Quicksort
Then the low index moves right until it is at an element that is larger than the pivot value (i.e., it is on the wrong side)
8 6 2 11 7 510124 6
low high
5
pivot value
312
![Page 49: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/49.jpg)
Quicksort
Then the high index moves left until it is at an element that is smaller than the pivot value (i.e., it is on the wrong side)
8 6 2 11 7 54 10124 6
low high
5
pivot value
3 2
![Page 50: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/50.jpg)
Quicksort
Then the two values are swapped and the index values are updated:
8 6 2 11 7 54 10124 6
low high
5
pivot value
32 12
![Page 51: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/51.jpg)
Quicksort
This continues until the two index values pass each other:
8 6 12 11 7 5424 6
low high
5
pivot value
3103 10
![Page 52: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/52.jpg)
Quicksort
This continues until the two index values pass each other:
8 6 12 11 7 5424 6
low high
5
pivot value
38 103
![Page 53: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/53.jpg)
Quicksort
This continues until the two index values pass each other:
12 11 7 5424
lowhigh
5
pivot value
8 103
![Page 54: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/54.jpg)
Quicksort
This continues until the two index values pass each other:
8 6 12 11 7 5424 6
lowhigh
5
pivot value
103
![Page 55: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/55.jpg)
Quicksort
This continues until the two index values pass each other:
8 6 12 11 7 5424 6
lowhigh
5
pivot value
103
![Page 56: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/56.jpg)
Quicksort
Then the pivot value is swapped into position:
8 6 12 11 7 5424 6
lowhigh
103 85
![Page 57: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/57.jpg)
Quicksort
Recursively quicksort the two parts:
5 6 12 11 7 8424 6103
Quicksort the left part Quicksort the right part
5
![Page 58: Ds lect 24 -sorting - ii](https://reader030.vdocument.in/reader030/viewer/2022020207/55a0d3131a28ab60108b47cc/html5/thumbnails/58.jpg)
Heap-Sort
template <class eType>
void Heap<eType> :: sort()
{
int m = currentSize;
int i=0;
eType minItem;
while(m>=2)
{
minItem = array[ 1 ];
//swap root item with last child
array[1] = array[m];
array[m] = minItem;
m--;
percolateDown( 1, m );
}
}