Script Preparation code:
x
 
window.users = [
  { name: 'Ваня', level: '3' },
  { name: 'Саша', level: '1' },
  { name: 'Маша', level: '2' },
  { name: 'Ника', level: '3' },
  { name: 'Вера', level: '1' },
  { name: 'Саша', level: '2' },
  { name: 'Ваня', level: '2' }
];
function swap(items, left, right) {
  var temp = [];
  if (left !== right) {
    temp = items[left];
    items[left] = items[right];
    items[right] = temp;
  }
}
function getItem(item, fieldName) {
  if (fieldName) {
    item = item[fieldName]
  }
  return item;
}
function bubbleSort(array, fieldName) {
  let { length } = array, items = [], i;
  while (length--) {
    items[length] = array[length];
  }
  let swapped = true;
  while (swapped) {
    swapped = false;
    for (i = 1; i < length; i++) {
      if (getItem(items[i - 1], fieldName) > getItem(items[i], fieldName)
          && getItem(items[i - 1], fieldName) !== getItem(items[i], fieldName))
      {
        swap(items, i - 1, i);
        swapped = true;
      }
    }
  }
  return items;
}
function insertionSort(array, fieldName) {
  let { length } = array, items = [];
  let i, j, current;
  while (length--) {
    items[length] = array[length];
  }
  for (i = 1; i < length; i++) {
    current = items[i];
    j = i;
    while (j > 0 && getItem(items[j - 1], fieldName) > getItem(current, fieldName)) {
      items[j] = items[j - 1];
      j--;
    }
    items[j] = current;
  }
  return items;
}
function selectionSort(array, fieldName) {
  let { length } = array, items = [];
  let i, j, indexMin;
  while (length--) {
    items[length] = array[length];
  }
  for (i = 0; i < length - 1; i++) {
    indexMin = i;
    for (j = i + 1; j < length; j++) {
      if (getItem(items[indexMin], fieldName) > getItem(items[j], fieldName)) {
        indexMin = j;
      }
    }
    swap(items, indexMin, i);
  }
  return items;
}
Tests:
  • Bubble sort

     
    bubbleSort(users, "level")
  • Insertion sort

     
    insertionSort(users, "level")
  • Selection sort

     
    selectionSort(users, "level")
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Bubble sort
    Insertion sort
    Selection sort

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36
Chrome Mobile 122 on Android
View result in a separate tab
Test name Executions per second
Bubble sort 396331.7 Ops/sec
Insertion sort 399615.7 Ops/sec
Selection sort 403559.6 Ops/sec