/**
* 값 교환 연산
* arr 연산 중인 배열
* i 연산 중인 요소의 인덱스 값
* j 연산 중인 두 요소 사이의 거리
*/
함수 Refer(arr , i, j){
varchange = (arr[i] - arr[i - j]) < ? true: false, value
if (change) value; = arr[ i];
arr[i] = arr[i - j];
arr[i - j] = value
returnargs.callee(arr, i - j, j);
}
else {
return arr;
}
}
//Insertion sort
function insert(array){
for (var i = 1, len = array.length; i < len i ) {
if (array[i] < array[i - 1]) {
refer(array, i, 1)
}
return array;
}
위 부분은 삽입 정렬이고, 그 다음에는 힐 정렬:
//Hill sort
function shell(array){
var length = array.length, value; >for ( var i = Math.floor(length / 2); i > 0; i = Math.floor(i / 2)) {
for (var j = i; j if (array[j] < array[j - i]) {
refer(array, j, i)
}
else {
continue; 🎜>}
}
return array;
}
두 메소드에 사용된 참조 메소드는 동일합니다. 마지막으로 병합 정렬:
코드 복사
코드는 다음과 같습니다. //병합 정렬 함수 순서(arr1, arr2){ var arrLong = arr1.length > arr2.length ? arr1 : arr2
var arrShort = arr1.length <= arr2.length ? 🎜>var arr = [];
for (var i = 0, l = arrShort.length; i < l; i ) {
for (var j = 0, len = arrLong.length; j < ; len; j ) {
if (arrShort[i] < arrLong[j]) {
arr.push(arrShort[i])
if (i == l - 1) 🎜>for (var m = 0, n = arrLong.length; m < n; m ) {
arr[arr.length] = arrLong[m]
}
break; }
else {
arr.push(arrLong[j]);
arrLong.shift()
계속
}
}
return arr ;
}
좋은 제안이 있는 학생은 메시지를 남겨주세요! 여기서 자세히 설명할 필요 없이 코드만 살펴보세요.