JavaScript BubbleSort, how to increase its efficiency?

You have a bubblesort procedure like this. I need to make it more efficient by stopping the loop when the array is sorted or the array is already sorted.

function sortNumbers(listbox) {
  var x, y, holder;
  // The Bubble Sort method.
  for(x = 0; x < ranarray.length; x++) {
    for(y = 0; y < (ranarray.length-1); y++) {
      if(ranarray[y] > ranarray[y+1]) {
        holder = ranarray[y+1];
        ranarray[y+1] = ranarray[y];
        ranarray[y] = holder;
      }
    }
  }
+3
source share
4 answers

Before entering the inner loop, create a boolean to check if an exchange has occurred inside the inner loop. When there is no swap, the array is sorted.

function sortNumbers(listbox) { 
  var x, y, holder; 
  // The Bubble Sort method. 
  for(x = 0; x < ranarray.length; x++) { 
    var swapOccured = false;
    for(y = 0; y < (ranarray.length-1); y++) { 
      if(ranarray[y] > ranarray[y+1]) { 
        holder = ranarray[y+1]; 
        ranarray[y+1] = ranarray[y]; 
        ranarray[y] = holder; 
        swapOccured = true;
      } 
    }
    if (!swapOccured) break; 
  } 
+4
source
var a = [1, 203, 3, 746, 200];

function bubbleSort(a)
{
    var swapped;
    do {
        swapped = false;
        for (var i=0; i < a.length-1; i++) {
            if (a[i] > a[i+1]) {
                var temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
                swapped = true;
            }
        }
    } while (swapped);

    for(i=0;i<a.length;i++)
    {
        document.write(a[i]+"\t");
    }
}

bubbleSort(a);
+2
source

, . , .

, x, , . , x , x .

function sortNumbers(listbox) {
  var done = false;
  for (var x = 1; !done; x++) {
    done = true;
    for (var y = 0; y < ranarray.length - x; y++) {
      if (ranarray[y] > ranarray[y + 1]) {
        var holder = ranarray[y + 1];
        ranarray[y + 1] = ranarray[y];
        ranarray[y] = holder;
        done = false;
      }
    }
  }
}
0
source

You can use XOR positions for shift bits in an array;

var arr, len, len2;
    arr = [0, 5, 7, 8, 9, 1, 2, 3, 6, 4];

len = arr.length;

// for loops
for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - 1; j++) {
        if (arr[i] <= arr[j]) {
            arr[i] = arr[i] ^ arr[j];
            arr[j] = arr[j] ^ arr[i];
            arr[i] = arr[i] ^ arr[j];
        }
    }
}

// negative while
while (--len) {
    len2 = len;
    while (len2--) {
        if (arr[len] < arr[len2]) {
            arr[len] = arr[len] ^ arr[len2];
            arr[len2] = arr[len2] ^ arr[len];
            arr[len] = arr[len] ^ arr[len2];
        }
    }
}

jsperf: http://jsperf.com/sort-tive/4

0
source

Source: https://habr.com/ru/post/1746413/


All Articles