Are You Familiar with Crazier Sorts in JavaScript

  • Post category:JavaScript

Are You Familiar with Crazier Sorts in JavaScript?

Have you ever wondered if there are sorting algorithms other than the popular ones like bubble sort, merge sort, and quick sort? In this article, we will dive deeper into the world of JavaScript and explore some of the lesser-known, yet interesting, sorting algorithms that can be handy in certain scenarios.

1. Pancake Sort

The Pancake Sort algorithm is a fun and quirky way to sort an array. It involves flipping the elements in a specific manner until the array is sorted. Here’s an example implementation:

function pancakeSort(arr) {
  for (let i = arr.length; i > 1; i--) {
    let maxIndex = findMaxIndex(arr, i);
    flip(arr, maxIndex + 1);
    flip(arr, i);
  }
  return arr;
}

function findMaxIndex(arr, n) {
  let maxIndex = 0;
  for (let i = 1; i < n; i++) {
    if (arr[i] > arr[maxIndex]) {
      maxIndex = i;
    }
  }
  return maxIndex;
}

function flip(arr, k) {
  let i = 0;
  while (i < k / 2) {
    let temp = arr[i];
    arr[i] = arr[k - i - 1];
    arr[k - i - 1] = temp;
    i++;
  }
}

2. Stooge Sort

Stooge Sort is a recursive sorting algorithm that works by dividing the array into thirds and recursively sorting the first two-thirds and the last two-thirds separately. Here’s an example implementation:

function stoogeSort(arr, low = 0, high = arr.length - 1) {
  if (arr[low] > arr[high]) {
    let temp = arr[low];
    arr[low] = arr[high];
    arr[high] = temp;
  }

  if (high - low + 1 > 2) {
    let t = Math.floor((high - low + 1) / 3);

    stoogeSort(arr, low, high - t);
    stoogeSort(arr, low + t, high);
    stoogeSort(arr, low, high - t);
  }

  return arr;
}

3. Bogosort

Bogosort, also known as Permutation Sort or Monkey Sort, is a naive and highly inefficient sorting algorithm. It randomly shuffles the array until the elements are in the correct order. Here’s an example implementation:

function isSorted(arr) {
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < arr[i - 1]) {
      return false;
    }
  }
  return true;
}

function bogosort(arr) {
  while (!isSorted(arr)) {
    shuffle(arr);
  }
  return arr;
}

function shuffle(arr) {
  for (let i = arr.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
}

These are just a few examples of the crazier sorting algorithms you can experiment with in JavaScript. While they may not be the most efficient options in terms of performance for larger datasets, they can be a fun way to explore the possibilities and gain a deeper understanding of how sorting algorithms work.

Remember, it’s important to choose the right sorting algorithm based on your specific use case and the size of your dataset. Understanding these lesser-known sorting algorithms can give you an edge in solving unique problems or optimizing performance in niche scenarios.

So, next time you find yourself in need of a peculiar sorting algorithm, consider giving these crazier sorts a try!