Bubble sort using two stacks

Learn how to implement an algorithm to sort an array using two stacks and bubble sort paradigm in javascript.

Example

Input:
10 2 45 22 -1 0

Output:
-1 0 2 10 22 45

Implementation to bubble sort an array with two stacks.

  • First push all the elements of the array in one stack.
  • Then loop all the elements of the array and alternatively swap the elements using both the stacks.
  • To swap keep on pushing elements in one stack till the top of the other stack is smaller than the element being pushed from first stack.
  • If the element being pushed is smaller than top of other stack then swap them (as in bubble sort).
  • And in the end (tricky step) get the top element from the stack and place it in the array at its position.
  • Keep doing this alternatively for both the stacks
let bubbleSortWithStack = (arr, n = arr.length) => {
  //First stack
  let stack1 = new Stack();
  
  //Copy all the elements of 
  //array in the stack
  for(let elm of arr){
    stack1.push(elm);
  }
  
  //Second stack
  let stack2 = new Stack();
  
  for(let i = 0; i < n; i++){
    
    if(i % 2 == 0){
      //Loop till stack1 has elements
      while(!stack1.isEmpty()){
        //Get the top element from the stack1
        let t = stack1.pop();
        
        //If stack2 is empty then add the
        //Element to the stack2
        if(stack2.isEmpty()){
          stack2.push(t);
        }else{
          //Else compare the top elements of stack1 and stack2
          //And swap them based on the sorting order
          if(stack2.peek() > t){
            let temp = stack2.pop();
            stack2.push(t);
            stack2.push(temp);
          }else{
            stack2.push(t);
          }
        }
      }
      
      // Tricky step 
      arr[n-1-i] = stack2.pop();
    }else{
      //Loop till stack2 has elements
      while(!stack2.isEmpty()){
        
        //Get the top element from stack2
        let t = stack2.pop();
        
        //If stack1 is empty then
        //Then add the element in the stack2
        if(stack1.isEmpty()){
          stack1.push(t);
        }else{
          //Else compare the stack1 and stack2 top elements
          //And swap them based on the sorting order
          if(stack1.peek() > t){
            let temp = stack1.pop();
            stack1.push(t);
            stack1.push(temp);
          }else{
            stack1.push(t);
          }
        }
      }
      
      //Tricky step 
      arr[n-1-i] = stack1.pop();
    }
  }
}
Input:
let arr = [10, 2, 45, 22, -1, 0];
bubbleSortWithStack(arr);
console.log(arr);

Output:
[-1, 0, 2, 10, 22, 45]

Time complexity: O(n ^ 2).
Space complexity: O(n).