Сортировка выбором

var numbers = [3, 5, 15, 6, 2, 1];

for(var i = 0; i < numbers.length ; i++){
for(var j = 1; j < numbers.length; j++){

if(numbers[i] > numbers[j]){
  var count;
  count = numbers[j];
  numbers[j] = numbers[i];
  numbers[i] = count;
}    

}
}

Не могу понять, почему этот код не работает. При этом если изменить var j = 1, на var j = i +1, то все проверки проходит.

  1. j также с 0 должен начинаться
  2. вы в обратную сторону перебираете, нужно numbers[i] < numbers[j]

или сделайте j = i + 1

У меня i - первое число массива. j - последующие после i. Если i больше следующего, то мы меняем следующее на i и потом уже то число перебираем с оставшимися и если они меньше, то меняем местами.
Какая разница j начать с 1 и ++ или с i(0) + 1 по логике все то же самое

нет, разница есть. давайте разберемся:

первая итерация цикла i, первая итерация цикла j. i = 0, j = 1. 3 > 5? нет, продолжаем, стартуем 2 итерацию цикла j: i = 0; j = 2, 3 > 15? нет, продолжаем, стартуем…

4 итерация цикла j: i = 0; j = 4, 3 > 2? да, запишем 2 в буфер, 3 перезаписываем на позицию 4 массива, достаем из буфера 2 и ставим в 0 позицию массива.
5 итерация цикла j: i = 0; j = 5, 2 > 1? нет, заканчиваем цикл j.
[2, 5, 15, 6, 3, 1]
вторая итерация цикла i, первая итерация цикла j; …


[1, 2, 15, 6, 5, 3]
третья итерация цикла i ща будет жесть, хардкор, уберите детей от экрана
i = 2, j = 1; 15 > 2 ? да, записываем 2 в буфер, 15 помещаем на 1 позицию массива, а 2 достаем из буфера в 2 позицию массива.
напоминаю, что сейчас массив выглядит как [1, 15, 2, 6, 5, 3]
и дальше ошибка только будет накапливаться, т.к. ни одна цифра не будет больше 15

применение же j = i + 1 не будет обращаться к цифрам уже отсортированным. т.е. на третьей итерации цикла i мы не будем опрашивать цифры массива в 0, 1, 2 позициях.
ЛИБО
мы начинаем оба цикла с нуля и самые большие элементы скапливаются в начале. тут мы либо делаем реверс массива, либо меняем знак на < в условии и тогда они будут скапливаться в конце.

вообще добавьте в цикл вывод в консоль, чтобы посмотреть как можно поиздеваться над циклами

ъыъ
var numbers = [3, 5, 15, 6, 2, 1];

for (var i = 0; i < numbers.length; i++) {
  for (var j = 0; j < numbers.length; j++) {

    if (numbers[i] < numbers[j]) {
      var count;
      count = numbers[j];
      numbers[j] = numbers[i];
      numbers[i] = count;
      console.log(numbers);
    }
  }
}

Кажется я все понял, спасибо! ) Проблема в том, что я каждый внутренний цикл начинаю с предыдущих уже отсортированных значений, потому что он обнуляется до 1 при следующей итерации i.