Toy_ #13. insertionSort
整列挿入
整列挿入
時間の複雑さ
長所
短所
注:yujoのベル
質問する
要素の整数の配列を入力し、昇順に並べ替えて返します.
に注意
に答える
const insertionSort = function (arr, transform = (item) => item) {
// 두 번째 인덱스 수부터 바로 앞 인덱스의 값과 비교하여 정렬한다.
let aux = [arr[0]];
// 비교할 첫 번째 요소는 따로 선언해 놓는다.
for(let i = 1; i < arr.length; i++) {
if (transform(arr[i]) >= transform(aux[i - 1])) {
// 현재 요소 값이 비교할 앞 인덱스의 요소보다 크면, 현재 요소 값을 따로 선언한 배열에 push한다.
aux.push(arr[i])
}
else {
for (let j = 0; j < i; j++) {
// 그렇지 않은 경우 aux의 배열의 길이만큼 (i의 숫자 크기만큼) for문을 돌려
if (transform(arr[i]) <= transform(aux[j])) {
// aux의 전체 요소값 중에 현재 요소 값보다 큰 값이 있는 경우
const left = aux.slice(0, j);
// 해당 현재 요소 값을 해당 큰 값 바로 앞에 끼워 넣어야 한다.
// 큰 값 바로 앞 left
const right = aux.slice(j);
// 큰 값 바로 뒤 right로 선언하고
aux = left.concat(arr[i], right)
// 사이에 현재 요소 값을 넣어 준다.
break;
// swap한 후 else 반복문을 멈춘다.
}
}
}
}
return aux
};
ソートの挿入、要素値の比較、swapの比較を学習することで問題を解くことを試みたが、高度な問題の効果は芳しくなかった.最後に文献を参考にした.transform = (item) => item
に関数を入れることはまだ正確には理解できませんが、現在のコールバック関数では、コールバック関数が外部でパラメータを指定していない場合、関数内部の式は依然として正しいです.また外で指定すると,そのコールバックは内部意識の回帰と理解できる.Reference
この問題について(Toy_ #13. insertionSort), 我々は、より多くの情報をここで見つけました https://velog.io/@jonghwan2_y/Toy-13.-insertionSortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol