SlideShare a Scribd company logo
1 of 29
Quicksort
2
Introduction
 Fastest known sorting algorithm in practice
 Average case: O(N log N)
 Worst case: O(N2)
 But, the worst case seldom happens.
 Another divide-and-conquer recursive
algorithm, like mergesort
3
Quicksort
 Divide step:
 Pick any element (pivot) v in S
 Partition S – {v} into two disjoint groups
S1 = {x  S – {v} | x <= v}
S2 = {x  S – {v} | x  v}
 Conquer step: recursively sort S1 and S2
 Combine step: the sorted S1 (by the time
returned from recursion), followed by v,
followed by the sorted S2 (i.e., nothing extra
needs to be done)
v
v
S1 S2
S
4
Example
5
6
Pseudocode
Input: an array a[left, right]
QuickSort (a, left, right) {
if (left < right) {
pivot = Partition (a, left, right)
Quicksort (a, left, pivot-1)
Quicksort (a, pivot+1, right)
}
}
MergeSort (a, left, right) {
if (left < right) {
mid = divide (a, left, right)
Quicksort (a, left, mid-1)
Quicksort (a, mid+1, right)
merge(a, left, mid+1, right)
}
}
Compare with MergeSort:
7
Two key steps
 How to pick a pivot?
 How to partition?
8
Pick a pivot
 Use the first element as pivot
 if the input is random, ok
 if the input is presorted (or in reverse order)
all the elements go into S2 (or S1)
this happens consistently throughout the recursive calls
Results in O(n2) behavior (Analyze this case later)
 Choose the pivot randomly
 generally safe
 random number generation can be expensive
9
In-place Partition
 If use additional array (not in-place) like MergeSort
Straightforward to code like MergeSort (write it down!)
Inefficient!
 Many ways to implement
 Even the slightest deviations may cause
surprisingly bad results.
Not stable as it does not preserve the ordering of the
identical keys.
Hard to write correctly 
10
int partition(a, left, right, pivotIndex) {
pivotValue = a[pivotIndex];
swap(a[pivotIndex], a[right]);
// Move pivot to end
storeIndex = left;
for (i from left to right) {
if a[i] < pivotValue
swap(a[storeIndex], a[i]);
storeIndex = storeIndex + 1 ;
}
swap(a[right], a[storeIndex]);
// Move pivot to its final place
return storeIndex;
}
Look at Wikipedia
An easy version of in-place partition to understand,
but not the original form
11
quicksort(a,left,right) {
if (right>left) {
pivotIndex = left;
select a pivot value a[pivotIndex];
pivotNewIndex=partition(a,left,right,pivotIndex);
quicksort(a,left,pivotNewIndex-1);
quicksort(a,pivotNewIndex+1,right);
}
}
12
Partition variant
 Want to partition an array A[left .. right]
 First, get the pivot element out of the way by swapping it with the
last element. (Swap pivot and A[right])
 Let i start at the first element and j start at the next-to-last
element (i = left, j = right – 1)
pivot i j
5 6 4 6 3 12 19 5 6 4 6
3 12
19
swap
13
 Want to have
 A[x] <= pivot, for x < i
 A[x] >= pivot, for x > j
 When i < j
 Move i right, skipping over elements smaller than the pivot
 Move j left, skipping over elements greater than the pivot
 When both i and j have stopped
A[i] >= pivot
A[j] <= pivot
i j
5 6 4 6
3 12
19
i j
5 6 4 6
3 12
19
i j
<= pivot >= pivot
14
 When i and j have stopped and i is to the left of j
 Swap A[i] and A[j]
The large element is pushed to the right and the small element is
pushed to the left
 After swapping
A[i] <= pivot
A[j] >= pivot
 Repeat the process until i and j cross
swap
i j
5 6 4 6
3 12
19
i j
5 3 4 6
6 12
19
15
 When i and j have crossed
 Swap A[i] and pivot
 Result:
 A[x] <= pivot, for x < i
 A[x] >= pivot, for x > i
i j
5 3 4 6
6 12
19
i
j
5 3 4 6
6 12
19
i
j
5 3 4 6 6 12 19
16
void quickSort(int a[], int left, int right) {
int i = left;
int j = right;
if (right - left >= 1) {
int pivot = a[left];
while (j > i) {
while ((a[i]<=pivot) && (i<=right) && (j>i))
i++;
while ((a[j]>pivot) && (j>=left) && (j>=i))
j--;
if (j > i)
swap(a, i, j);
}
swap(a, left, j);
quickSort(a, left, j - 1);
quickSort(a, j + 1, right);
}
else { return; }
}
quickSort(a,0,size-1);
Implementation (put the pivot on the leftmost instead of rightmost)
Change it into the rightmost …
17
void quickSort(int array[])
// pre: array is full, all elements are non-null integers
// post: the array is sorted in ascending order
{
quickSort(array, 0, array.length - 1); // quicksort all the elements in the array
}
void quickSort(int array[], int start, int end)
{
int i = start; // index of left-to-right scan
int k = end; // index of right-to-left scan
if (end - start >= 1) // check that there are at least two elements to sort
{
int pivot = array[start]; // set the pivot as the first element in the partition
while (k > i) // while the scan indices from left and right have not met,
{
while (array[i] <= pivot && i <= end && k > i) // from the left, look for the first
i++; // element greater than the pivot
while (array[k] > pivot && k >= start && k >= i) // from the right, look for the first
k--; // element not greater than the pivot
if (k > i) // if the left seekindex is still smaller than
swap(array, i, k); // the right index, swap the corresponding elements
}
swap(array, start, k); // after the indices have crossed, swap the last element in
// the left partition with the pivot
quickSort(array, start, k - 1); // quicksort the left partition
quickSort(array, k + 1, end); // quicksort the right partition
}
else // if there is only one element in the partition, do not do any sorting
{
return; // the array is sorted, so exit
}
}
void swap(int array[], int index1, int index2) {…}
// pre: array is full and index1, index2 < array.length
// post: the values at indices 1 and 2 have been swapped
Adapted from http://www.mycsresource.net/articles/programming/sorting_algos/quickso
18
Use the median of the array
 Partitioning always cuts the array into roughly half
 An optimal quicksort (O(N log N))
 However, hard to find the exact median
e.g., sort an array to pick the value in the middle
Pick a better Pivot
19
median of three
 We will use median of three
 Compare just three elements: the leftmost, rightmost and center
 Swap these elements if necessary so that
A[left] = Smallest
A[right] = Largest
A[center] = Median of three
 Pick A[center] as the pivot
 Swap A[center] and A[right – 1] so that pivot is at second last position
(why?)
median3
20
pivot
5 6 4
6
3 12 19
2 13 6
5 6 4 3 12 19
2 6 13
A[left] = 2, A[center] = 13,
A[right] = 6
Swap A[center] and A[right]
5 6 4 3 12 19
2 13
pivot
6
5 6 4 3 12
19
2 13
Choose A[center] as pivot
Swap pivot and A[right – 1]
Note we only need to partition A[left + 1, …, right – 2]. Why?
21
 Works only if pivot is picked as
median-of-three.
 A[left] <= pivot and A[right] >= pivot
 Thus, only need to partition A[left +
1, …, right – 2]
 j will not run past the beginning
 because a[left] <= pivot
 i will not run past the end
 because a[right-1] = pivot
The coding style is efficient, but hard to read 
22
i=left;
j=right-1;
while (1) {
do i=i+1;
while (a[i] < pivot);
do j=j-1;
while (pivot < a[j]);
if (i<j) swap(a[i],a[j]);
else break;
}
23
Small arrays
 For very small arrays, quicksort does not
perform as well as insertion sort
 how small depends on many factors, such as the
time spent making a recursive call, the compiler,
etc
 Do not use quicksort recursively for small
arrays
 Instead, use a sorting algorithm that is efficient for
small arrays, such as insertion sort
24
A practical implementation
For small arrays
Recursion
Choose pivot
Partitioning
25
Quicksort Analysis
 Assumptions:
 A random pivot (no median-of-three partitioning)
 No cutoff for small arrays
 Running time
 pivot selection: constant time, i.e. O(1)
 partitioning: linear time, i.e. O(N)
 running time of the two recursive calls
 T(N)=T(i)+T(N-i-1)+cN where c is a constant
 i: number of elements in S1
26
Worst-Case Analysis
 What will be the worst case?
 The pivot is the smallest element, all the time
 Partition is always unbalanced
27
Best-case Analysis
 What will be the best case?
 Partition is perfectly balanced.
 Pivot is always in the middle (median of the array)
28
Average-Case Analysis
 Assume
 Each of the sizes for S1 is equally likely
 This assumption is valid for our pivoting
(median-of-three) strategy
 On average, the running time is O(N log N)
(covered in comp271)
29
Quicksort is ‘faster’ than Mergesort
 Both quicksort and mergesort take O(N log N) in the
average case.
 Why is quicksort faster than mergesort?
 The inner loop consists of an increment/decrement (by 1,
which is fast), a test and a jump.
 There is no extra juggling as in mergesort.
inner loop

More Related Content

Similar to quicksort (1).ppt

CSE680-07QuickSort.pptx
CSE680-07QuickSort.pptxCSE680-07QuickSort.pptx
CSE680-07QuickSort.pptxDeepakM509554
 
Sorting algos > Data Structures & Algorithums
Sorting algos  > Data Structures & AlgorithumsSorting algos  > Data Structures & Algorithums
Sorting algos > Data Structures & AlgorithumsAin-ul-Moiz Khawaja
 
Dsa – data structure and algorithms sorting
Dsa – data structure and algorithms  sortingDsa – data structure and algorithms  sorting
Dsa – data structure and algorithms sortingsajinis3
 
search_sort Search sortSearch sortSearch sortSearch sort
search_sort Search sortSearch sortSearch sortSearch sortsearch_sort Search sortSearch sortSearch sortSearch sort
search_sort Search sortSearch sortSearch sortSearch sortShanmuganathan C
 
14-sorting (3).ppt
14-sorting (3).ppt14-sorting (3).ppt
14-sorting (3).pptyasser3omr
 
Unit ii divide and conquer -1
Unit ii divide and conquer -1Unit ii divide and conquer -1
Unit ii divide and conquer -1subhashchandra197
 
Quick sort Algorithm Discussion And Analysis
Quick sort Algorithm Discussion And AnalysisQuick sort Algorithm Discussion And Analysis
Quick sort Algorithm Discussion And AnalysisSNJ Chaudhary
 
DAA-Divide and Conquer methodology, DAA 2024
DAA-Divide and Conquer methodology, DAA 2024DAA-Divide and Conquer methodology, DAA 2024
DAA-Divide and Conquer methodology, DAA 2024RUHULAMINHAZARIKA
 
quick sort by deepak.pptx
quick sort by deepak.pptxquick sort by deepak.pptx
quick sort by deepak.pptxDeepakM509554
 
Quicksort Algorithm..simply defined through animations..!!
Quicksort Algorithm..simply defined through animations..!!Quicksort Algorithm..simply defined through animations..!!
Quicksort Algorithm..simply defined through animations..!!Mahesh Tibrewal
 
My lectures circular queue
My lectures circular queueMy lectures circular queue
My lectures circular queueSenthil Kumar
 

Similar to quicksort (1).ppt (20)

CSE680-07QuickSort.pptx
CSE680-07QuickSort.pptxCSE680-07QuickSort.pptx
CSE680-07QuickSort.pptx
 
Sorting algos > Data Structures & Algorithums
Sorting algos  > Data Structures & AlgorithumsSorting algos  > Data Structures & Algorithums
Sorting algos > Data Structures & Algorithums
 
Quick sort
Quick sortQuick sort
Quick sort
 
Algorithms - "quicksort"
Algorithms - "quicksort"Algorithms - "quicksort"
Algorithms - "quicksort"
 
Dsa – data structure and algorithms sorting
Dsa – data structure and algorithms  sortingDsa – data structure and algorithms  sorting
Dsa – data structure and algorithms sorting
 
search_sort Search sortSearch sortSearch sortSearch sort
search_sort Search sortSearch sortSearch sortSearch sortsearch_sort Search sortSearch sortSearch sortSearch sort
search_sort Search sortSearch sortSearch sortSearch sort
 
Sorting techniques
Sorting techniques Sorting techniques
Sorting techniques
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
14-sorting (3).ppt
14-sorting (3).ppt14-sorting (3).ppt
14-sorting (3).ppt
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
Unit ii divide and conquer -1
Unit ii divide and conquer -1Unit ii divide and conquer -1
Unit ii divide and conquer -1
 
Quick sort Algorithm Discussion And Analysis
Quick sort Algorithm Discussion And AnalysisQuick sort Algorithm Discussion And Analysis
Quick sort Algorithm Discussion And Analysis
 
DAA-Divide and Conquer methodology, DAA 2024
DAA-Divide and Conquer methodology, DAA 2024DAA-Divide and Conquer methodology, DAA 2024
DAA-Divide and Conquer methodology, DAA 2024
 
Bs,qs,divide and conquer 1
Bs,qs,divide and conquer 1Bs,qs,divide and conquer 1
Bs,qs,divide and conquer 1
 
quick sort by deepak.pptx
quick sort by deepak.pptxquick sort by deepak.pptx
quick sort by deepak.pptx
 
Quicksort Algorithm..simply defined through animations..!!
Quicksort Algorithm..simply defined through animations..!!Quicksort Algorithm..simply defined through animations..!!
Quicksort Algorithm..simply defined through animations..!!
 
Unit 2 - Quick Sort.pptx
Unit 2 - Quick Sort.pptxUnit 2 - Quick Sort.pptx
Unit 2 - Quick Sort.pptx
 
Unit 7 sorting
Unit 7   sortingUnit 7   sorting
Unit 7 sorting
 
My lectures circular queue
My lectures circular queueMy lectures circular queue
My lectures circular queue
 

More from Balasubramanian699229 (12)

computer networks Error Detection Methods.pdf
computer networks Error Detection Methods.pdfcomputer networks Error Detection Methods.pdf
computer networks Error Detection Methods.pdf
 
Engineers as experimenter in professional ethics
Engineers as experimenter in professional ethicsEngineers as experimenter in professional ethics
Engineers as experimenter in professional ethics
 
cp.docx
cp.docxcp.docx
cp.docx
 
Introduction to Computers.ppt
Introduction to Computers.pptIntroduction to Computers.ppt
Introduction to Computers.ppt
 
Unit III.ppt
Unit III.pptUnit III.ppt
Unit III.ppt
 
DATA COMMUNICATIONS.ppt
DATA COMMUNICATIONS.pptDATA COMMUNICATIONS.ppt
DATA COMMUNICATIONS.ppt
 
bargaining.pdf
bargaining.pdfbargaining.pdf
bargaining.pdf
 
occupational crime.pdf
occupational crime.pdfoccupational crime.pdf
occupational crime.pdf
 
Civic Virtues_Unit1.pptx
Civic Virtues_Unit1.pptxCivic Virtues_Unit1.pptx
Civic Virtues_Unit1.pptx
 
Titanic-Powerpoint.pdf
Titanic-Powerpoint.pdfTitanic-Powerpoint.pdf
Titanic-Powerpoint.pdf
 
3 Mile island.pdf
3 Mile island.pdf3 Mile island.pdf
3 Mile island.pdf
 
Chernobyl_Nuclear_Disaster_ppt.pptx
Chernobyl_Nuclear_Disaster_ppt.pptxChernobyl_Nuclear_Disaster_ppt.pptx
Chernobyl_Nuclear_Disaster_ppt.pptx
 

Recently uploaded

Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxk795866
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Internship report on mechanical engineering
Internship report on mechanical engineeringInternship report on mechanical engineering
Internship report on mechanical engineeringmalavadedarshan25
 
GDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSCAESB
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSKurinjimalarL3
 
Current Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLCurrent Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLDeelipZope
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile servicerehmti665
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )Tsuyoshi Horigome
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...Soham Mondal
 
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfCCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfAsst.prof M.Gokilavani
 
power system scada applications and uses
power system scada applications and usespower system scada applications and uses
power system scada applications and usesDevarapalliHaritha
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024Mark Billinghurst
 
Artificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxArtificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxbritheesh05
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 

Recently uploaded (20)

Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptx
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Internship report on mechanical engineering
Internship report on mechanical engineeringInternship report on mechanical engineering
Internship report on mechanical engineering
 
GDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentation
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
 
Current Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLCurrent Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCL
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile service
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
 
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfCCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
 
power system scada applications and uses
power system scada applications and usespower system scada applications and uses
power system scada applications and uses
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024
 
Artificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxArtificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptx
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 

quicksort (1).ppt

  • 2. 2 Introduction  Fastest known sorting algorithm in practice  Average case: O(N log N)  Worst case: O(N2)  But, the worst case seldom happens.  Another divide-and-conquer recursive algorithm, like mergesort
  • 3. 3 Quicksort  Divide step:  Pick any element (pivot) v in S  Partition S – {v} into two disjoint groups S1 = {x  S – {v} | x <= v} S2 = {x  S – {v} | x  v}  Conquer step: recursively sort S1 and S2  Combine step: the sorted S1 (by the time returned from recursion), followed by v, followed by the sorted S2 (i.e., nothing extra needs to be done) v v S1 S2 S
  • 5. 5
  • 6. 6 Pseudocode Input: an array a[left, right] QuickSort (a, left, right) { if (left < right) { pivot = Partition (a, left, right) Quicksort (a, left, pivot-1) Quicksort (a, pivot+1, right) } } MergeSort (a, left, right) { if (left < right) { mid = divide (a, left, right) Quicksort (a, left, mid-1) Quicksort (a, mid+1, right) merge(a, left, mid+1, right) } } Compare with MergeSort:
  • 7. 7 Two key steps  How to pick a pivot?  How to partition?
  • 8. 8 Pick a pivot  Use the first element as pivot  if the input is random, ok  if the input is presorted (or in reverse order) all the elements go into S2 (or S1) this happens consistently throughout the recursive calls Results in O(n2) behavior (Analyze this case later)  Choose the pivot randomly  generally safe  random number generation can be expensive
  • 9. 9 In-place Partition  If use additional array (not in-place) like MergeSort Straightforward to code like MergeSort (write it down!) Inefficient!  Many ways to implement  Even the slightest deviations may cause surprisingly bad results. Not stable as it does not preserve the ordering of the identical keys. Hard to write correctly 
  • 10. 10 int partition(a, left, right, pivotIndex) { pivotValue = a[pivotIndex]; swap(a[pivotIndex], a[right]); // Move pivot to end storeIndex = left; for (i from left to right) { if a[i] < pivotValue swap(a[storeIndex], a[i]); storeIndex = storeIndex + 1 ; } swap(a[right], a[storeIndex]); // Move pivot to its final place return storeIndex; } Look at Wikipedia An easy version of in-place partition to understand, but not the original form
  • 11. 11 quicksort(a,left,right) { if (right>left) { pivotIndex = left; select a pivot value a[pivotIndex]; pivotNewIndex=partition(a,left,right,pivotIndex); quicksort(a,left,pivotNewIndex-1); quicksort(a,pivotNewIndex+1,right); } }
  • 12. 12 Partition variant  Want to partition an array A[left .. right]  First, get the pivot element out of the way by swapping it with the last element. (Swap pivot and A[right])  Let i start at the first element and j start at the next-to-last element (i = left, j = right – 1) pivot i j 5 6 4 6 3 12 19 5 6 4 6 3 12 19 swap
  • 13. 13  Want to have  A[x] <= pivot, for x < i  A[x] >= pivot, for x > j  When i < j  Move i right, skipping over elements smaller than the pivot  Move j left, skipping over elements greater than the pivot  When both i and j have stopped A[i] >= pivot A[j] <= pivot i j 5 6 4 6 3 12 19 i j 5 6 4 6 3 12 19 i j <= pivot >= pivot
  • 14. 14  When i and j have stopped and i is to the left of j  Swap A[i] and A[j] The large element is pushed to the right and the small element is pushed to the left  After swapping A[i] <= pivot A[j] >= pivot  Repeat the process until i and j cross swap i j 5 6 4 6 3 12 19 i j 5 3 4 6 6 12 19
  • 15. 15  When i and j have crossed  Swap A[i] and pivot  Result:  A[x] <= pivot, for x < i  A[x] >= pivot, for x > i i j 5 3 4 6 6 12 19 i j 5 3 4 6 6 12 19 i j 5 3 4 6 6 12 19
  • 16. 16 void quickSort(int a[], int left, int right) { int i = left; int j = right; if (right - left >= 1) { int pivot = a[left]; while (j > i) { while ((a[i]<=pivot) && (i<=right) && (j>i)) i++; while ((a[j]>pivot) && (j>=left) && (j>=i)) j--; if (j > i) swap(a, i, j); } swap(a, left, j); quickSort(a, left, j - 1); quickSort(a, j + 1, right); } else { return; } } quickSort(a,0,size-1); Implementation (put the pivot on the leftmost instead of rightmost) Change it into the rightmost …
  • 17. 17 void quickSort(int array[]) // pre: array is full, all elements are non-null integers // post: the array is sorted in ascending order { quickSort(array, 0, array.length - 1); // quicksort all the elements in the array } void quickSort(int array[], int start, int end) { int i = start; // index of left-to-right scan int k = end; // index of right-to-left scan if (end - start >= 1) // check that there are at least two elements to sort { int pivot = array[start]; // set the pivot as the first element in the partition while (k > i) // while the scan indices from left and right have not met, { while (array[i] <= pivot && i <= end && k > i) // from the left, look for the first i++; // element greater than the pivot while (array[k] > pivot && k >= start && k >= i) // from the right, look for the first k--; // element not greater than the pivot if (k > i) // if the left seekindex is still smaller than swap(array, i, k); // the right index, swap the corresponding elements } swap(array, start, k); // after the indices have crossed, swap the last element in // the left partition with the pivot quickSort(array, start, k - 1); // quicksort the left partition quickSort(array, k + 1, end); // quicksort the right partition } else // if there is only one element in the partition, do not do any sorting { return; // the array is sorted, so exit } } void swap(int array[], int index1, int index2) {…} // pre: array is full and index1, index2 < array.length // post: the values at indices 1 and 2 have been swapped Adapted from http://www.mycsresource.net/articles/programming/sorting_algos/quickso
  • 18. 18 Use the median of the array  Partitioning always cuts the array into roughly half  An optimal quicksort (O(N log N))  However, hard to find the exact median e.g., sort an array to pick the value in the middle Pick a better Pivot
  • 19. 19 median of three  We will use median of three  Compare just three elements: the leftmost, rightmost and center  Swap these elements if necessary so that A[left] = Smallest A[right] = Largest A[center] = Median of three  Pick A[center] as the pivot  Swap A[center] and A[right – 1] so that pivot is at second last position (why?) median3
  • 20. 20 pivot 5 6 4 6 3 12 19 2 13 6 5 6 4 3 12 19 2 6 13 A[left] = 2, A[center] = 13, A[right] = 6 Swap A[center] and A[right] 5 6 4 3 12 19 2 13 pivot 6 5 6 4 3 12 19 2 13 Choose A[center] as pivot Swap pivot and A[right – 1] Note we only need to partition A[left + 1, …, right – 2]. Why?
  • 21. 21  Works only if pivot is picked as median-of-three.  A[left] <= pivot and A[right] >= pivot  Thus, only need to partition A[left + 1, …, right – 2]  j will not run past the beginning  because a[left] <= pivot  i will not run past the end  because a[right-1] = pivot The coding style is efficient, but hard to read 
  • 22. 22 i=left; j=right-1; while (1) { do i=i+1; while (a[i] < pivot); do j=j-1; while (pivot < a[j]); if (i<j) swap(a[i],a[j]); else break; }
  • 23. 23 Small arrays  For very small arrays, quicksort does not perform as well as insertion sort  how small depends on many factors, such as the time spent making a recursive call, the compiler, etc  Do not use quicksort recursively for small arrays  Instead, use a sorting algorithm that is efficient for small arrays, such as insertion sort
  • 24. 24 A practical implementation For small arrays Recursion Choose pivot Partitioning
  • 25. 25 Quicksort Analysis  Assumptions:  A random pivot (no median-of-three partitioning)  No cutoff for small arrays  Running time  pivot selection: constant time, i.e. O(1)  partitioning: linear time, i.e. O(N)  running time of the two recursive calls  T(N)=T(i)+T(N-i-1)+cN where c is a constant  i: number of elements in S1
  • 26. 26 Worst-Case Analysis  What will be the worst case?  The pivot is the smallest element, all the time  Partition is always unbalanced
  • 27. 27 Best-case Analysis  What will be the best case?  Partition is perfectly balanced.  Pivot is always in the middle (median of the array)
  • 28. 28 Average-Case Analysis  Assume  Each of the sizes for S1 is equally likely  This assumption is valid for our pivoting (median-of-three) strategy  On average, the running time is O(N log N) (covered in comp271)
  • 29. 29 Quicksort is ‘faster’ than Mergesort  Both quicksort and mergesort take O(N log N) in the average case.  Why is quicksort faster than mergesort?  The inner loop consists of an increment/decrement (by 1, which is fast), a test and a jump.  There is no extra juggling as in mergesort. inner loop