Quicksort Implementation In Java

Overview

Quixort is a sorting algorithm based on a distribution and conquest strategy.

This article runs through the implementation of the Quixort algorithm in Java. Writing the partition process, which takes the given part of the array bounded by a left and right pointer, and swaps elements to the correct side of a pivot element. The process also returns the partition point for the next recursive calls of Quicksort. Setting up the condition for the base case and recursive step of Quicksort. Writing the recursive Quicksort calls on both the left side and right side of the partition. Running our implementation with helpful print statements Partitioning

Partitioning is the flesh of the Quixort algorithm.

public int partition (int[] arr, int leftPointer, int rightPointer) } }

At the beginning of the function, we must select the row element as our axis element.

The goal is to have all the elements less than the axis element on the left (not necessarily aligned), and the elements on the far right.

Let’s assume that the distribution () function should run on a given row.

Walk-through of Partition

Let’s use to demonstrate this row:

[ 39, 15, 24, 35, 76, 19 ]

Note: We will use L where Initially, err [left side] such as [ 39, 15, 24, 35, 76, 19 ] L P R

Let's compare this element with L .

39 > 24. That means we want it on the other side of the pivot. L stays [ 39, 15, 24, 35, 76, 19 ] L P R

Now do the same with R and axis.

R also stays the same since 19 < 24. Both L and R pointers are paused, ready for the elements to be swapped. [ 39, 15, 24, 35, 76, 19 ] L P R

We should convert the elements to L and R. Note: In some cases, either the left or right pointer can block the axis element.

[ 19, 15, 24, 35, 76, 39 ] L P R

while the loop should restart.

[ 19, 15, 24, 35, 76, 39 ] L R P

If the left index is now equal to the right index, the loop ends.

We've provided a step-by-step example of what should happen during the partitioning process, so we can interpret the steps in the sidocode below.

int partition (int[] arr, int leftPointer, int rightPointer) { Pivot = value of arr at (average of leftPointer and rightPointer, rounded down) While leftPointer and rightPointer don't meet (i.e. the pointers haven't hit all the elements yet) Increment leftPointer until element pointed to is > pivot Decrement rightPointer until element pointed to is < pivot If leftPointer less than rightPointer: Swap elements at leftPointer and rightPointer return leftPointer as the partition point }

Note that we have the exchange () function from the pre-configured lessons.

Leave a Comment

Your email address will not be published. Required fields are marked *