Не уверен насчет механизма замены в Insertion Sort - PullRequest
0 голосов
/ 27 марта 2020
const insertionSort = arr => {
  const len = arr.length;
  for (let i = 0; i < len; i++) {
    let el = arr[i]; //el = 44
    console.log(el); 
    let j;

    for (j = i - 1; j >= 0 && arr[j] > el; j--) { //j=0, 99> 44
      arr[j + 1] = arr[j]; //arr[1] = arr[0] 99 takes the position of 44 in index 1
    }
    arr[j + 1] = el; 
    console.log(arr);
  }
  return arr;
};  

insertionSort([99,44,22])

Repl ниже:

https://repl.it/@Stylebender / inserttionSort

В моем вводе [99,44,22], просто интересно, в какой строке код 44 занимает позицию 99 в индексе 0, потому что я не уверен, что вижу это ...

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Внутренний l oop и строка после - это место, где происходит обмен:

for (j = i - 1; j >= 0 && arr[j] > el; j--) {
   arr[j + 1] = arr[j];
}
arr[j + 1] = el; 

Когда i = 0, ничего не происходит j = i - 1 = -1 и поэтому внутренний l oop не выполняется.

Но на следующей итерации i = 1, поэтому el устанавливается на второй элемент, который равен 44. Тогда j = i - 1 = 0 и arr[0] равно 99, что больше el, поэтому выполняется внутренний l oop. поэтому arr[1] устанавливается на arr[0], что составляет 99. Затем j уменьшается до -1, и теперь внутренний l oop останавливается.

Итак, j + 1 = 0 и нет arr[j+1] или arr[0] установлен на el, что составляет 44. Так что теперь 44 и 99 поменялись местами.

0 голосов
/ 27 марта 2020

Это строка

arr[j + 1] = el;

j равна -1 в конце l oop, поэтому j + 1 равно 0.

...