Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Quicksort Pivot

Sort the following array a using quicksort,

[6, 11, 4, 9, 8, 2, 5, 8, 13, 7]

The pivot should be chosen as the arithmetic mean of the first and the last element, i.e., (a[0] + a[size - 1]) / 2 (rounded down).

Show all important steps such as partitioning and the recursive calls to the algorithm.


I understand how to sort the array using quicksort, however I'm not sure how to calculate the pivot.

Is the pivot calculated by 6 + 7 = 13 then 13 / 2 = 6.5 (rounded down is 6) so the pivot is 2 (i.e. the 6th element)?

I know the elements less than pivot appear on the left hand side, and elements greater than the pivot appear on the right hand side, and the partition repeats this step of sorting the sub-array.

Any help would be greatly appreciated.

like image 966
Paradox Avatar asked May 24 '11 14:05

Paradox


People also ask

What is the best pivot for Quicksort?

Best Case Complexity - In Quicksort, the best-case occurs when the pivot element is the middle element or near to the middle element. The best-case time complexity of quicksort is O(n*logn).

What is a pivot in quick sort?

First, quicksort determines something called a pivot, which is a somewhat arbitrary element in the collection. Next, using the pivot point, it partitions (or divides) the larger unsorted collection into two, smaller lists.

Where is pivot in quick sort?

here is an smart method to choose pivot element- 1. choose the first, mid, last element of the array. 2. compare these three numbers and find the number which is greater than one and smaller than other i.e. median.


3 Answers

For quicksort, the pivot can be whatever element you want. Check out Wikipedia.

The problem was easily solved by choosing either a random index for the pivot, choosing the middle index of the partition or (especially for longer partitions) choosing the median of the first, middle and last element of the partition for the pivot

Three choices thus :

  • First element
  • Middle element
  • Median of first, middle and last.

And in you case using the mean of first and last element value would give you :

6 + 7 = 13
13 / 2 = 6.5
6.5 rounded down = 6
like image 129
i.am.michiel Avatar answered Sep 21 '22 16:09

i.am.michiel


For the given array [6, 11, 4, 9, 8, 2, 5, 8, 13, 7]

Calculate something like this:

  • Select first element which is 6
  • Select last element of list which is 7

  • Select mid element which is mid = (length%2==0) ? (length/2)-1 : (length-1)/2, which is 8

  • This makes an array and sort this it will be [6,7,8], now mid element in your array is mid.
like image 43
Rupesh Avatar answered Sep 21 '22 16:09

Rupesh


By the way the question is worded, the pivot should just be 6 and not necessarily the 6th item in the array.

This is most definitely the case because if there were only 3 items in the array, for example, and the arithmetic mean came out to be greater than 3, you would have no pivot to choose because there is no item with that index.

Note: Be careful with the way you index elements in your array. You said the 6th element is '2', when it may be '5' if your programming language starts indices at 0.

like image 32
PaulV Avatar answered Sep 23 '22 16:09

PaulV