Category Archives: AOAD

Implementing Quicksort Algorithm in Java

Quicksort is a divide and conquer algorithm. Quicksort first divides a large array into two smaller sub-arrays: the low elements and the high elements. Quicksort can then recursively sort the sub-arrays.

The steps are:

  1. Pick an element, called a pivot, from the array.
  2. Reorder the array so that all elements with values less than the pivot come before the pivot, while all elements with values greater than the pivot come after it (equal values can go either way). After this partitioning, the pivot is in its final position. This is called the partition operation.
  3. Recursively apply the above steps to the sub-array of elements with smaller values and separately to the sub-array of elements with greater values.

(Via Wikipedia)

Continue reading Implementing Quicksort Algorithm in Java

Implementing Merge Sort Algorithm in Java

Merge Sort is a classic divide-and-conquer sorting algorithm that recursively splits an array in half, sorts each half independently, and then merges the two sorted halves back together. It guarantees O(n log n) time complexity in all cases — best, average, and worst — making it one of the most reliable general-purpose sorting algorithms. Unlike QuickSort, Merge Sort is stable and does not depend on a good pivot choice.

Merge Sort Example
Merge Sort: divide the list into single elements, then repeatedly merge sorted sublists. (Via Wikipedia, CC BY-SA)
Continue reading Implementing Merge Sort Algorithm in Java

Implementing MinMax Algorithm in Java

Finding the minimum and maximum elements in a dataset is a common problem in computer science. While you can solve this using simple iteration, using a divide-and-conquer approach is more efficient in certain scenarios, especially in recursive algorithms. In this blog post, we’ll explore a recursive Java implementation of the Min-Max algorithm.

What is the Min-Max Algorithm?

The Min-Max algorithm splits the array into smaller parts, recursively determines the minimum and maximum of each part, and then combines the results. This divide-and-conquer approach reduces the number of comparisons compared to a naive linear method.

Why Use Divide-and-Conquer?

  • It minimizes the number of comparisons.
  • More efficient for large datasets.
  • Demonstrates recursion and good problem-solving strategies.
Continue reading Implementing MinMax Algorithm in Java

Implementing Binary Search in Java

Searching for elements in large datasets is a common task in computer programming, and doing it efficiently can greatly improve performance. One such efficient method is binary search—an algorithm designed specifically for sorted data. In this blog post, we’ll walk through how binary search works conceptually and then explore a working Java program that performs binary search on a user-provided set of numbers.

What is Binary Search?

Binary search is a divide-and-conquer algorithm used to find the position of a target value within a sorted array. Rather than checking each element one by one like a linear search, binary search repeatedly divides the array into two halves and compares the target with the middle element.

How Binary Search Works:

  1. Start with the middle element of the array.
  2. If the middle element is the target, return its index.
  3. If the target is smaller, repeat the search on the left half.
  4. If the target is greater, repeat the search on the right half.
  5. Continue this process until the element is found or the sub-array size becomes zero.

Because it halves the number of elements to be checked each time, binary search has a time complexity of O(log n), making it much faster than linear search for large datasets.

Continue reading Implementing Binary Search in Java