Javascript: Bubble Sort

本小妞迷上赌 提交于 2020-07-05 11:24:10

问题


I have made a bubble sort algorithm (sorta) using JS. It works sometimes, but the problem is that it only iterates through the array once. Here is my code:

function bubble(arr) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > arr[i + 1]) {
      var a = arr[i]
      var b = arr[i + 1]
      arr[i] = b
      arr[i + 1] = a
    }
  }
  return arr;
}

回答1:


You need an inner loop to complete the sort correctly:

function bubble(arr) {
      var len = arr.length;
    
      for (var i = 0; i < len ; i++) {
        for(var j = 0 ; j < len - i - 1; j++){ // this was missing
        if (arr[j] > arr[j + 1]) {
          // swap
          var temp = arr[j];
          arr[j] = arr[j+1];
          arr[j + 1] = temp;
        }
       }
      }
      return arr;
    }

document.write(bubble([1,9,2,3,7,6,4,5,5]));



回答2:


Please look at the following sequence:

[5, 4, 3, 2, 1]

Now lets say you need to sort this in the ascending order using bubble sort.

So, you iterate the array and swap adjacent elements which are ordered otherwise.

Here is what you will get after the completion of the iteration

[4, 3, 2, 1, 5]

Now if you do this another time, you will get this:

[3, 2, 1, 4, 5]

Likewise, you need to repeat the iteration enough times to get it sorted fully. This means you need 2 nested loops. The inner loop is to iterate the array and the outer loop is to repeat the iteration.

Please see the step-by-step example of this article.




回答3:


var array = [6,2,3,7,5,4,1];
function bubbleSort(arr) {
    for(let j=0;j<arr.length;j++) {
        for(let i = 0; i < arr.length; i++) {
            if(arr[i]>arr[i+1]) {
                var temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
    }      
    return arr;
}
console.log(bubbleSort(array));



回答4:


My bubble sort with just a while loop :

function bubbleSort(arr){
  var sorted = false
  while (!sorted){
    sorted = true;
    arr.forEach(function (element, index, array){
      if (element > array[index+1]) {
        array[index] = array[index+1];
        array[index+1] = element;
        sorted = false;
      }
    });
  }
}



回答5:


function bubble(arr) {//You need Two Loops for Bubble sort
  for (var i = 0; i < arr.length; i++) {//Outer Loop
   for(var j=0; j < arr.length - 1; j++){//Inner Loop
    if (arr[j] > arr[j + 1]) {
      var a = arr[j]
      var b = arr[j + 1]
      arr[j] = b
      arr[j + 1] = a
     }
   }
  }
  return arr;
}



回答6:


Another form of bubble sort includes starting at the end of the array and placing the smallest element first and going till the largest. This is the code:

function bubbleSort(items) {  
    var length = items.length;
    for (var i = (length - 1); i >= 0; i--) {
        //Number of passes
        for (var j = (length - i); j > 0; j--) {
            //Compare the adjacent positions
            if (items[j] < items[j - 1]) {
                //Swap the numbers
                var tmp = items[j];
                items[j] = items[j - 1];
                items[j - 1] = tmp;
            }
        }
    }
}

Note Bubble sort is one of the slowest sorting algorithms.




回答7:


const bubbleSort = (array)=>{
  let sorted = false;

  let counter =0;

  while(!sorted){
    sorted = true;  
    for(let i =0; i < array.length -1 -counter; i++){

      if(array[i] > array[i+1]){
        helper(i,i+1,array);        
        sorted = false;
      }
    } 
    counter++;
  }
  return array;

}

//swap function
function helper(i,j, array){
  return [array[i],array[j]] = [array[j],array[i]]
}

let array=[8,5,2,9,5,6,3];

console.log(bubbleSort(array))



回答8:


It works for me. I commented the code for more understanding

bubbleSort = (numbersArray) => {
  const arrayLenght = numbersArray.length;

  for (let i = 0; i < arrayLenght; i++) {
    for(let j = 0; j < arrayLenght; j++) {
      // Print only to debug
      // console.log(`i: ${i} - j: ${j}`);
      // console.log(`numbersArray[i]: ${numbersArray[i]} | numbersArray[j]: ${numbersArray[j]}`);
    
      // Check if current number is greater than the next number
      if (numbersArray[j] > numbersArray[j + 1]) {
        // Store current value to generate swap
        const currentNumber = numbersArray[j];

        // Now the current position get value of the next position
        // And de next position get value of the current position
        numbersArray[j] = numbersArray[j + 1];
        numbersArray[j + 1] = currentNumber; 
      } 
    }
  }

  // Debug: Print the sorted array
  console.log(`sorted array: ${numbersArray.toString()}`);
}

const numbers = [
  [3, 10, 5, 7],
  [8, 5, 2, 9, 5, 6, 3],
  [4, 50, 28, 47, 9, 2097, 30, 41, 11, 3, 68],
  [3, 10, 5, 7, 8, 5, 2, 9, 5, 6, 3]
];

numbers.forEach(element => {
  bubbleSort(element);
});

Output:

  • sorted array: 3,5,7,10
  • sorted array: 2,3,5,5,6,8,9
  • sorted array: 3,4,9,11,28,30,41,47,50,68,2097
  • sorted array: 2,3,3,5,5,5,6,7,8,9,10


来源:https://stackoverflow.com/questions/37817334/javascript-bubble-sort

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!