Chetans19 / Javascript-data-structures-and-algorithms

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Javascript-data-structures-and-algorithms

All data structures and algorithms implemented in javascript will be uploaded here.

Binary search

const binarySearch = (array, target) => {
  let startIndex = 0;
  let endIndex = array.length - 1;
  while(startIndex <= endIndex) {
    let middleIndex = Math.floor((startIndex + endIndex) / 2);
    if(target === array[middleIndex) {
      return console.log("Target was found at index " + middleIndex);
    }
    if(target > array[middleIndex]) {
      console.log("Searching the right side of Array")
      startIndex = middleIndex + 1;
    }
    if(target < array[middleIndex]) {
      console.log("Searching the left side of array")
      endIndex = middleIndex - 1;
    }
    else {
      console.log("Not Found this loop iteration. Looping another iteration.")
    }
  }
  
  console.log("Target value not found in array");
}

Bubble sort

// UNOPTIMIZED VERSION OF BUBBLE SORT
function bubbleSort(arr){
 for(var i = arr.length; i > 0; i--){
   for(var j = 0; j < i - 1; j++){
     console.log(arr, arr[j], arr[j+1]);
     if(arr[j] > arr[j+1]){
       var temp = arr[j];
       arr[j] = arr[j+1];
       arr[j+1] = temp;         
     }
   }
 }
 return arr;
}

// ES2015 Version
function bubbleSort(arr) {
 const swap = (arr, idx1, idx2) => {
   [arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]];
 };

 for (let i = arr.length; i > 0; i--) {
   for (let j = 0; j < i - 1; j++) {
     if (arr[j] > arr[j + 1]) {
       swap(arr, j, j + 1);
     }
   }
 }
 return arr;
}

bubbleSort([8,1,2,3,4,5,6,7,8,9,10]);

Insertion sort

function insertionSort(arr) {
  
  for(var i=0; i<arr.length; i++) {
    let j = i-1;
    let temp = arr[i];
    while(j>=0 && arr[j] > temp) {
      arr[j+1] = arr[j]
      j--;
    }
    arr[j+1] = temp;
  }
return arr;
}

insertionSort([20,3,2,5,89,29,4]);

Merge sort

 function merge (left, right) {
  let resultArray = [], leftIndex = 0, rightIndex = 0;

  // We will concatenate values into the resultArray in order
  while (leftIndex < left.length && rightIndex < right.length) {
    if (left[leftIndex] < right[rightIndex]) {
      resultArray.push(left[leftIndex]);
      leftIndex++; // move left array cursor
    } else {
      resultArray.push(right[rightIndex]);
      rightIndex++; // move right array cursor
    }
  }

  // We need to concat here because there will be one element remaining
  // from either left OR the right
  return resultArray
          .concat(left.slice(leftIndex))
          .concat(right.slice(rightIndex));
}

Quick sort

var items = [5,3,7,6,2,9];
function swap(items, leftIndex, rightIndex){
   var temp = items[leftIndex];
   items[leftIndex] = items[rightIndex];
   items[rightIndex] = temp;
}
function partition(items, left, right) {
   var pivot   = items[Math.floor((right + left) / 2)], //middle element
       i       = left, //left pointer
       j       = right; //right pointer
   while (i <= j) {
       while (items[i] < pivot) {
           i++;
       }
       while (items[j] > pivot) {
           j--;
       }
       if (i <= j) {
           swap(items, i, j); //sawpping two elements
           i++;
           j--;
       }
   }
   return i;
}

function quickSort(items, left, right) {
   var index;
   if (items.length > 1) {
       index = partition(items, left, right); //index returned from partition
       if (left < index - 1) { //more elements on the left side of the pivot
           quickSort(items, left, index - 1);
       }
       if (index < right) { //more elements on the right side of the pivot
           quickSort(items, index, right);
       }
   }
   return items;
}
// first call to quick sort
var sortedArray = quickSort(items, 0, items.length - 1);
console.log(sortedArray); //prints [2,3,5,6,7,9]


Linked list

Doubly linked list

Binary Search Tree

Dynamic programming

About


Languages

Language:JavaScript 100.0%