COSC 1P03 Data Structures and Abstraction 12.1 Searching Even if you do learn to speak correct English, whom are you going to speak it to? Clarence Darrow.

Slides:



Advertisements
Similar presentations
Introduction to Algorithms Quicksort
Advertisements

Garfield AP Computer Science
CSE Lecture 3 – Algorithms I
Sorting Sorting is the process of arranging a list of items in a particular order The sorting process is based on specific value(s) Sorting a list of test.
DIVIDE AND CONQUER APPROACH. General Method Works on the approach of dividing a given problem into smaller sub problems (ideally of same size).  Divide.
CSE 373: Data Structures and Algorithms
Sorting Chapter Sorting Consider list x 1, x 2, x 3, … x n We seek to arrange the elements of the list in order –Ascending or descending Some O(n.
Updated QuickSort Problem From a given set of n integers, find the missing integer from 0 to n using O(n) queries of type: “what is bit[j]
Data Structures and Algorithms PLSD210 Sorting. Card players all know how to sort … First card is already sorted With all the rest, ¶Scan back from the.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Sorting.
Ver. 1.0 Session 5 Data Structures and Algorithms Objectives In this session, you will learn to: Sort data by using quick sort Sort data by using merge.
1 TCSS 342, Winter 2005 Lecture Notes Sorting Weiss Ch. 8, pp
Merge sort, Insertion sort
TDDB56 DALGOPT-D DALG-C Lecture 8 – Sorting (part I) Jan Maluszynski - HT Sorting: –Intro: aspects of sorting, different strategies –Insertion.
Cmpt-225 Sorting. Fundamental problem in computing science  putting a collection of items in order Often used as part of another algorithm  e.g. sort.
Merge sort, Insertion sort. Sorting I / Slide 2 Sorting * Selection sort or bubble sort 1. Find the minimum value in the list 2. Swap it with the value.
 2003 Prentice Hall, Inc. All rights reserved Sorting Arrays Sorting data –Important computing application –Virtually every organization must sort.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 11 Sorting and Searching.
Chapter 7 (Part 2) Sorting Algorithms Merge Sort.
© 2006 Pearson Addison-Wesley. All rights reserved10 A-1 Chapter 10 Algorithm Efficiency and Sorting.
CHAPTER 7: SORTING & SEARCHING Introduction to Computer Science Using Ruby (c) Ophir Frieder at al 2012.
Week 11 Sorting Algorithms. Sorting Sorting Algorithms A sorting algorithm is an algorithm that puts elements of a list in a certain order. We need sorting.
1 Data Structures and Algorithms Sorting. 2  Sorting is the process of arranging a list of items into a particular order  There must be some value on.
Algorithm Analysis 2P03 © Dave Bockus Acknowledgments to Mark Allen Weiss 2014 Data Structures & Algorithm Analysis in Java.
Merge Sort. What Is Sorting? To arrange a collection of items in some specified order. Numerical order Lexicographical order Input: sequence of numbers.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 19: Searching and Sorting.
LAB#7. Insertion sort In the outer for loop, out starts at 1 and moves right. It marks the leftmost unsorted data. In the inner while loop, in starts.
CSE 373: Data Structures and Algorithms Lecture 6: Sorting 1.
Sorting. Pseudocode of Insertion Sort Insertion Sort To sort array A[0..n-1], sort A[0..n-2] recursively and then insert A[n-1] in its proper place among.
Merge sort, Insertion sort. Sorting I / Slide 2 Sorting * Selection sort (iterative, recursive?) * Bubble sort.
CSC 211 Data Structures Lecture 13
Chapter 5 Searching and Sorting. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Examine the linear search and binary.
Sorting Chapter Sorting Consider list x 1, x 2, x 3, … x n We seek to arrange the elements of the list in order –Ascending or descending Some O(n.
Data Structure Introduction.
CS 361 – Chapters 8-9 Sorting algorithms –Selection, insertion, bubble, “swap” –Merge, quick, stooge –Counting, bucket, radix How to select the n-th largest/smallest.
Sort Algorithms.
1 C++ Plus Data Structures Nell Dale Chapter 10 Sorting and Searching Algorithms Slides by Sylvia Sorkin, Community College of Baltimore County - Essex.
3 – SIMPLE SORTING ALGORITHMS
Review 1 Selection Sort Selection Sort Algorithm Time Complexity Best case Average case Worst case Examples.
Divide And Conquer A large instance is solved as follows:  Divide the large instance into smaller instances.  Solve the smaller instances somehow. 
Lecture No. 04,05 Sorting.  A process that organizes a collection of data into either ascending or descending order.  Can be used as a first step for.
Sorting and Searching by Dr P.Padmanabham Professor (CSE)&Director
1 Searching and Sorting Searching algorithms with simple arrays Sorting algorithms with simple arrays –Selection Sort –Insertion Sort –Bubble Sort –Quick.
QUICKSORT 2015-T2 Lecture 16 School of Engineering and Computer Science, Victoria University of Wellington COMP 103 Marcus Frean.
Chapter 9 Sorting. The efficiency of data handling can often be increased if the data are sorted according to some criteria of order. The first step is.
Data Structures - CSCI 102 Selection Sort Keep the list separated into sorted and unsorted sections Start by finding the minimum & put it at the front.
Searching and Sorting Searching: Sequential, Binary Sorting: Selection, Insertion, Shell.
ICS201 Lecture 21 : Sorting King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
PREVIOUS SORTING ALGORITHMS  BUBBLE SORT –Time Complexity: O(n 2 ) For each item, make (n –1) comparisons Gives: Comparisons = (n –1) + (n – 2)
Review Quick Sort Quick Sort Algorithm Time Complexity Examples
Sorting Ordering data. Design and Analysis of Sorting Assumptions –sorting will be internal (in memory) –sorting will be done on an array of elements.
Sorting & Searching Geletaw S (MSC, MCITP). Objectives At the end of this session the students should be able to: – Design and implement the following.
Intro. to Data Structures Chapter 7 Sorting Veera Muangsin, Dept. of Computer Engineering, Chulalongkorn University 1 Chapter 7 Sorting Sort is.
329 3/30/98 CSE 143 Searching and Sorting [Sections 12.4, ]
1 compares each element of the array with the search key. works well for small arrays or for unsorted arrays works for any table slow can put more commonly.
Searching and Sorting Searching algorithms with simple arrays
Sorting Mr. Jacobs.
Subject Name: Design and Analysis of Algorithm Subject Code: 10CS43
Sorting.
Sorting Why? Displaying in order Faster Searching Categories Internal
Data Structures and Algorithms
Description Given a linear collection of items x1, x2, x3,….,xn
Sorting Chapter 13 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved
Advanced Sorting Methods: Shellsort
SORTING AND SEARCHING.
Unit-2 Divide and Conquer
Searching.
CSE 373: Data Structures and Algorithms
CSE 373 Data Structures and Algorithms
Advanced Sorting Methods: Shellsort
Presentation transcript:

COSC 1P03 Data Structures and Abstraction 12.1 Searching Even if you do learn to speak correct English, whom are you going to speak it to? Clarence Darrow

COSC 1P03 Data Structures and Abstraction 12.2 Searching  locating one record (object) from a collection  search key  unique vs duplicate  outcomes  found/not found  simple vs exhaustive search  internal vs external  order  significant step  probe (checking key)  simple O(n)  better O(lg n)  best O(1)  key comparison search

COSC 1P03 Data Structures and Abstraction 12.3 Sequential (Linear) Search  principle  probe in order  pattern  as variation of basic search  simple vs exhaustive  analysis  depends on where element is found  average performance  each probe eliminates 1 entry  O(n)  e.g. printing transcripts  loading array  searching  parameters  variations

COSC 1P03 Data Structures and Abstraction 12.4 Binary Search  large collections  e.g. telephone book  requires - sorted by key  principle  distribution of keys?  probe at midpoint  pattern  variation of basic  probing  bounds  updating  termination

COSC 1P03 Data Structures and Abstraction 12.5  analysis  worst case  each probe eliminates 1/2 remaining entries  O(log n)  iterative implementation  parameters  termination  adjusting lo & hi  recursive implementation Binary Search..

COSC 1P03 Data Structures and Abstraction 12.6 Comparison  orders  O(n) vs O(lg n)  requirements  unsorted vs sorted  complexity of code  programmer time  maintenance  size of n  n  32  comparison statistics

COSC 1P03 Data Structures and Abstraction 12.7 Sorting Executive ability is deciding quickly and getting someone else to do the work. John G. Pollard

COSC 1P03 Data Structures and Abstraction 12.8 Sorting  reports  in name or id number order  ordering by key  subsorts  e.g. by course within department  sort key  duplicate keys  internal vs external sorting  in situ  stable  depends on implementation  required for subsorts

COSC 1P03 Data Structures and Abstraction 12.9 Analysis  order  key comparison  simple O(n 2 )  best O(n lg n)  simple  pass  sorted & unsorted segments  better  divide-and-conquer

COSC 1P03 Data Structures and Abstraction Selection Sort  principle  select smallest (of remaining) and put it next  behavior  last pass  pattern  find minimum (maximum)  exchange  in situ, not stable  analysis  O(n) comparisons each pass  O(n) passes  O(n 2 )  Animation:

COSC 1P03 Data Structures and Abstraction E.g. Producing a Sorted Class List  data – records of students maintained by Registrar  Student class  process  load students  selecting desired records  sort resultant array  sorting  parameters  implementation (selection sort)  variations

COSC 1P03 Data Structures and Abstraction Fig 11.1

COSC 1P03 Data Structures and Abstraction Fig 11.2

COSC 1P03 Data Structures and Abstraction Table 11.1

COSC 1P03 Data Structures and Abstraction Fig 11.4

COSC 1P03 Data Structures and Abstraction Fig 11.5

COSC 1P03 Data Structures and Abstraction Table 11.2

COSC 1P03 Data Structures and Abstraction Table 11.3

COSC 1P03 Data Structures and Abstraction Fig 11.7

COSC 1P03 Data Structures and Abstraction Fig 11.8

COSC 1P03 Data Structures and Abstraction Fig 11.10

COSC 1P03 Data Structures and Abstraction Transcripts /**This method reads the Student records form a file into an **array and returns the number of records read. ** for student records ** of students read*/ private int loadStudents ( Student stds[] ) { intcount;// number of students StudentaStudent;// one student count = 0; while ( true ) { aStudent = new Student(stdFile); if ( ! stdFile.successful() | count >= stds.length ) break; stds[count] = aStudent; count = count + 1; }; return count; };// loadStudents Attempt to create a student object by reading the data from a file. If the constructor did not fail and we have room in the array continue. Enter Student object into the stds[] array. Increment the number of students read.

COSC 1P03 Data Structures and Abstraction Transcripts. /**This method searches the student records (stds) for a record **matching the key (stNum) using a sequential search. ** student records of student records key (student number) ** student record matching the key or null **if not found.*/ private Student search ( Student stds[], int nStd, String stNum ) { Studentresult;// Student found inti; i = 0; while ( true) { if ( i >= nStd ) { result = null; break; }; if ( stNum.compareTo(stds[i].getStNum()) == 0 ) { result = stds[i]; break; }; i = i + 1; }; return result; };// search Bounds check, have we over indexed that portion of the array which holds students? The result is null since we did not find anything. Break causes us to return a null. Could of just put “return null”. If we find the key we are looking for. Set the result to the Student record and break out of the loop. If we did not find the key we are looking for, the index into the array must be increment ed. Return the result when found.

COSC 1P03 Data Structures and Abstraction Binary Search Example lt =rt =mid =1 10 2lt =rt =mid = 1 2 3lt =rt =mid = (Array[5] = 8)  7 so… continue (Array[2] = 4)  7 so… continue (Array[3] = 6)  7 so... continue 4lt =rt =mid = 4 (Array[4] = 7) = 7 Found!!!! 4 4

COSC 1P03 Data Structures and Abstraction public int binarySearch( Comparable [ ] a, Comparable x ) { int low = 0, high = a.length - 1; int mid; while( low <= high ){ mid = ( low + high ) / 2; if( a[ mid ].compareTo( x ) < 0 ) low = mid + 1; // Search upper partition else if( a[ mid ].compareTo( x ) > 0 ) high = mid - 1; // Search lower partition else return mid; // Found } return NOT_FOUND; // NOT_FOUND is defined as -1 } Binary Search Iterative

COSC 1P03 Data Structures and Abstraction Binary Search Recursive int Bsearch(TableType T, KeyType key, int lt, int rt) { int mid; mid = (lt+rt)/2; if (lt>rt) //Search unsuccessful return 0; else if (T[mid]==key) //Search successful return mid; else if (T[mid]>key) //Search item < mid return Bsearch(T,key,lt,mid-1); else //Search item > mid return Bsearch(T,key,mid+1,rt); }

COSC 1P03 Data Structures and Abstraction Selection Sort /**This method reads student records from the stFile and **adds each student that is registered in the specified **course and year into the array. It returns the number **of students selected. ** nam of registratio of selected students. ** of students selected.*/ private int readStudents ( String course, String year, Student theClass[] ) { StudentaStudent;// one student intresult; result = 0; while ( true ) { aStudent = new Student(stFile); if ( ! stFile.successful() ) break; if ( aStudent.registeredIn(course,year) && result < MAX_CLASS ) { theClass[result] = aStudent; result = result + 1; }; return result; };// readStudents An array of students which will need sorting. Each student is read, and an object created. If the student is registered in the current course and year, they are entered into the array.

COSC 1P03 Data Structures and Abstraction Selection Sort. /**This method sorts a class list of a specified size into **ascending order by name using selection sort. ** class list to be sorted of students.*/ private void sort ( Student list[], int nStd ) { intsmallPos;// position of smallest item Studenttemp; inti; intj; for ( i=0 ; i<nStd-1 ; i++ ) { smallPos = i; for ( j=i+1 ; j<nStd ; j++ ) { if ( list[j].getName().compareTo(list[smallPos].getName()) < 0 ) { smallPos = j; }; temp = list[i]; list[i] = list[smallPos]; list[smallPos] = temp; }; };// sort The list of student we just loaded into the array. Number of students in the array Outer loop will conduct n passes of the unselected (unsorted) students. The selected student will be put in the list at i. Initialise to the Smallest student found, i.e. first element of the outer loop pass. Compare the smallPos student to the others to find a smaller one. If a smaller student is found then update the index smallPos to this new student. Once the array has been scanned smallPos will contain the smallest remaining student. Swap this with the list index i.

COSC 1P03 Data Structures and Abstraction Insertion Sort  principle  insert next entry (from unsorted) at correct point in sorted segment  behaviour  first pass  in situ, stable  analysis  O(n) passes  ave O(n) comparisons per pass  O(n 2 )  implementation  shifting elements  Pattern  Animation:

COSC 1P03 Data Structures and Abstraction Exchange (Bubble) Sort  principle  exchange pairs if out of order  works?  quit?  behaviour  largest “bubbles” to end  next pass doesn’t have to go to end  analysis  each pass moves 1 item to correct spot  O(n) passes  ave O(n) pairs  O(n 2 )  early termination  no exchanges  O(n) if sorted  in situ, can be stable  implementation  pattern

COSC 1P03 Data Structures and Abstraction QuickSort  principle  divide-and-conquer  partition into two sets, sort & combine  one set all smaller than other  partition  pivot  behavior  partition  recombination  analysis  partition  O(n)  passes  best/ave O(lg n)  worst O(n)  ave O(n log n)  pattern

COSC 1P03 Data Structures and Abstraction Implementation  recursion  trivial case: n=0, n=1  reduction: n to 2  n/2  in situ sort  partition within table  rearrangement  exchange out of place items  sort part of table  rejoining is no work  implementation  wrapper method  recursive call different than normal call  lNdx and rNdx  moved to find out of place items  if cross, no more items out of place  comparison of sort times

COSC 1P03 Data Structures and Abstraction Partitioning a List [ ] Given a List: [ 2 1 ] 3 [ ]  Take first # or choose a pivot element  Put everything less than this in a left sublist  Put everything greater than this in a right sublist  Keep doing this for each sublist  E.g. The above partitions into:

COSC 1P03 Data Structures and Abstraction Partitioning a List Cont… [ ] i j 1). While j th element > i th element, reduce j [ ] i j 2). Swap the i th and j th elements [ ] i j 3). While i th element <= j th element, increase i [ ] i j 4). Swap the i th and j th elements [ ] i j 5). Repeat 1 to 4 until j=i

COSC 1P03 Data Structures and Abstraction Partitioning a List Cont… [ ] i j [ ] i j Step 1 [ ] i j Step 2 [ ] i j Step 1 [ ] ij Step 1 [ ] ij Step 1 [ ] ij Step 2 [ ] i=j Step 3 Finished [ ] i j Step 4 [ ] i j Step 3 ][

COSC 1P03 Data Structures and Abstraction Best Case for Quick Sort  Alternately we can use a recurrence relation  T(N) = T(i) + T(N – i – 1) + cN  So  T(N) = 2T(N/2) + cN  T(N)/N = T(N/2)/(N/2) + c Multiply both sides by 1/N LHS: with i elements RHS: with N-i elements Number of comparison for pivot – constant time.

COSC 1P03 Data Structures and Abstraction Best Case QS Continued...  Cut list in ½ for each iteration until 1 element in partition  T(N)/N = T(N/2)/(N/2) + c  T(N/2)/(N/2)= T(N/4)/(N/4) + c  T(N/4)/(N/4)= T(N/8)/(N/8) + c  T(N/8)/(N/8)= T(N/16)/(N/16) + c  at some point  T(2)/(2)= T(1)/(1) + c

COSC 1P03 Data Structures and Abstraction Best Case QS Continued...  If we add up all equations:  T(N) + T(N/2) … T(2) = T(N/2) … T(2) +T(1) + clgN N + N/2 + N/4 … 2 N/2 + N/4 …2+ 1  Cancel out terms:  T(N) = T(1) + clgN N 1  T(N) = NT(1) + cNlgN  T(1) is 1 so:  T(N) = N + cNlgN  so order NlgN

COSC 1P03 Data Structures and Abstraction Worst Case for QS  T(N) = T(N-1) +cNN>1  Reducing the list by choosing the smallest  T(N-1) = T(N-2) + c(N-1)  T(N-2) = T(N-3) + c(N-2)  until  T(2) = T(1) +c(2) Pivot

COSC 1P03 Data Structures and Abstraction  Now add up all equations  T(N) +  T(N-1) - T(1) =  T(N-1) + c  N  T(N) = T(1) + c  N  T(N) = 1 + cN(N+1)/2  or  T(N) = O(N 2 ) Worst Case for QS

COSC 1P03 Data Structures and Abstraction Merge Sort  Basic Algorithm MERGE-SORT ( A, p, r ) IF p < r // Check for base case THEN q = FLOOR[( p + r )/2] // Divide step MERGE (A, p, q ) // Conquer step. MERGE (A, q + 1, r ) // Conquer step. Combine (A, p, q, r ) // Merge sublists.

COSC 1P03 Data Structures and Abstraction Merge Sort.

COSC 1P03 Data Structures and Abstraction Merge Sort..  void m_sort(int numbers[], int temp[], int left, int right) { int mid; if (right > left) { mid = (right + left) / 2; m_sort(numbers, temp, left, mid); m_sort(numbers, temp, mid+1, right); merge(numbers, temp, left, mid+1, right); } } Temp array used to hold values during the combine phase List to be sorted Left and Right bound of partition

COSC 1P03 Data Structures and Abstraction Merge Sort.... void merge(int numbers[], int temp[], int left, int mid, int right){ int i, left_end, num_elements, tmp_pos; left_end = mid - 1; tmp_pos = left; num_elements = right - left + 1; while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) { temp[tmp_pos] = numbers[left]; tmp_pos = tmp_pos + 1; left = left +1; } else{ temp[tmp_pos] = numbers[mid]; tmp_pos = tmp_pos + 1; mid = mid + 1; } } while (left <= left_end) { temp[tmp_pos] = numbers[left]; left = left + 1; tmp_pos = tmp_pos + 1; } while (mid <= right) { temp[tmp_pos] = numbers[mid]; mid = mid + 1; tmp_pos = tmp_pos + 1; } for (i = 0; i <= num_elements; i++) { numbers[right] = temp[right]; right = right - 1; } } Two lists are merged to the temp array until 1 is exhausted. Copy over the rest of the elements from the non empty sublist. Copy back the merged elements from temp to original input array “numbers”

COSC 1P03 Data Structures and Abstraction java.util.Arrays  Class providing static methods to manipulate arrays  like java.Lang.Math  don’t need to create an instance of Arrays  Provides search and sort among other operations  Searching  uses binary search  array must be sorted  one version for each primitive type  object version requires class implement Comparable  String implements Comparable  Sorting  uses modified quicksort  one version for each primitive type  object version requires class implement Comparable

Choose the middle element as the pivot Elements < the pivot are placed in a left sublist Those elements > the pivot are placed in a right sublist. Normally the pivot is combined with the left or right sub-list so one partition creates exactly 2 sub-lists. For each sub-list the middle is chosen and the partitioning continues. When only lists with 1 element exist then order is achieved.

COSC 1P03 Data Structures and Abstraction Insertion Sort /**This method sorts a class list of a specified size into **ascending order by name using insertion sort. ** class list to be sorted of students.*/ private void sort ( Student list[], int nStd ) { Studenttemp; inti; intj; for ( i=nStd-2 ; i>=0 ; i-- ) { temp = list[i]; j = i + 1; while ( j < nStd && list[j].getName().compareTo(temp.getName()) < 0 ) { list[j-1] = list[j]; j = j + 1; }; list[j-1] = temp; }; };// sort The array and the number of students in the array are passed into the sort method Start at the second last element and work down, because we know that a list with 1 item is by definition sorted. Set temp to the current item, we know this item will be moved up in the list (right) and the items to it’s right will be move down. ‘j’ is the index to the element right of i. Keep comparing the i th element (temp) to the j th element while i th element is less then the j th element. Must also make sure we don’t over index the array. Each time the i th element is less then the j th element, move the j th element down 1 cell. Increment j. We have found the insertion point so put the ith element (temp) into that cell.

COSC 1P03 Data Structures and Abstraction Bubble Sort /**This method sorts a class list of a specified size into **ascending order by name using exchange sort. ** class list to be sorted of students.*/ private void sort ( Student list[], int nStd ) { Studenttemp; inti; intj; for ( i=nStd-1 ; i>=1 ; i-- ) { for ( j=0 ; j<i ; j++ ) { if ( list[j+1].getName().compareTo(list[j].getName()) < 0 ) { temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; }; };// sort Do n-1 passes. We don’t have to check the very first element after n-1 passes, since a single element by definition is sorted. The inner loop is run from the bottom up to i. For every pass the largest element will bubble to the top. So i is reduce after each pass by 1. Check to see if adjacent elements are out of order, if they are then swap them. Does the swap.

COSC 1P03 Data Structures and Abstraction QuickSort private void quicksort ( Student list[], int left, int right ) { intlNdx;// index of left item to be exchanged intrNdx;// index of right item to be excahnged Stringpivot;// key of pivot item Studenttemp; if ( left < right ) { // more than one element /* partition */ lNdx = left; rNdx = right; pivot = list[(lNdx+rNdx)/2].getName(); do { while ( lNdx < right && list[lNdx].getName().compareTo(pivot) < 0 ) { lNdx = lNdx + 1; }; while ( rNdx > left && pivot.compareTo(list[rNdx].getName()) < 0 ) { rNdx = rNdx - 1; }; if ( lNdx <= rNdx ) { temp = list[lNdx]; list[lNdx] = list[rNdx]; list[rNdx] = temp; lNdx = lNdx + 1; rNdx = rNdx - 1; }; } while ( lNdx <= rNdx ) ; /* sort partitions */ quicksort(list,left,rNdx); quicksort(list,lNdx,right); }; };// quicksort The student list is passed in. The left and right boundary points of the partition are also passed in. These mark the sub-list. Note, there is no additional memory allocated, this is an in-place sort. Once the elements are partitioned they are also sorted relative to other partitions. Temporary indexes initialised to the sub-list boundary points, Used during the partitioning process. Pivot is chosen as the middle element of the sub-list, this ensures we do not get a degenerate case. Partitioning process which will separate the list into 2 sub-lists, left to the pivot and from the pivot to the right Each sub list is then recursively sorted. Note that all we are passing are the new end points of the sub- lists.

COSC 1P03 Data Structures and Abstraction The End