JavaScript 알고리즘의 정렬 방법 사용에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2017-07-22 14:43:17
원래의
1165명이 탐색했습니다.

사실, 배열의 정렬 메서드를 사용하여 js에서 배열 정렬을 구현하는 것은 비교적 간단합니다.

1. 정렬

배열 정렬의 간단한 구현

var arr = [];  
for(var i=0;i<20;i++){  
    arr.push(Math.floor(Math.random()*100))  
}  
arr.sort(function(a,b){  
    return a>b?1:-1;  
})  
alert(arr)
로그인 후 복사

단순히 정렬 메서드를 사용할 수는 없습니다. 기본적으로 정렬 방법은 우리가 생각하는 숫자 크기로 정렬하는 것이 아니라 ASCII 알파벳순으로 정렬하는 것입니다.

sort() 메서드는 메서드를 매개 변수로 사용할 수 있습니다. 각 정렬 비교에 대한 두 배열 항목을 나타냅니다. sort() 정렬 시 두 배열 항목을 비교할 때마다 이 매개변수가 실행되며, 비교된 두 배열 항목이 이 함수에 매개변수로 전달됩니다. 함수가 값 1을 반환하면 두 배열 항목의 순서가 바뀌고, 그렇지 않으면 바뀌지 않습니다.

알고리즘의 배열 정렬

var arr = [];  
for(var i=0;i<20;i++){  
    arr.push(Math.floor(Math.random()*100))  
}  
//生成一个无序的arr数组  
function sort(arr,start,end){  
    //数组长度为1  
    if(start == end ){  
        return [arr[start]]  
    }else if(start == end-1){  
        //数组长度为2,根据数值大小 来排序  
        if(arr[start]>arr[end]){  
            return [arr[end],arr[start]]  
        }else{  
            return [arr[start],arr[end]]  
        }  
    }  
    // 数组长度一半  
    var l = Math.floor((start+end)/2);  
    //左边数组  
    var arrLeft = sort(arr, start,l);  
    //右边数组  
    var arrRight = sort(arr,l+1,end);  
    //返回结果  
    var result = [];  
    //分割成两部分 左右两个数组 只比对数组中的第一个数,那个数值小就把谁放到结果里面,并把小的数值删除掉,固采用数组中的shift方法。一旦出现左边数组或右边数组,没有数据的时候  
    //result数组就与还有数据的数组合并 采用 concat,并返回结果  
    while(arrLeft.length>0 || arrRight.length>0){  
        if(arrLeft.length==0){  
            result = result.concat(arrRight);  
            break;  
        }else if(arrRight.length==0){  
            result = result.concat(arrLeft);  
            break;  
        }  
        if(arrLeft[0]<arrRight[0]){  
            result.push(arrLeft.shift())  
        }else{  
            result.push(arrRight.shift());  
        }  
    }  
    return result;  
}  
var arrSort = sort(arr,0,arr.length-1);//参数 数组,开始位置,结束位置  
document.write(arr+&#39;<br/>&#39;+arrSort);
로그인 후 복사

설명: 배열 정렬은 더 이상 수행할 수 없을 때까지 주로 배열을 두 개로 분할하는 방법을 사용합니다. 결국 배열의 길이가 다음과 같기 때문에 1개 또는 2개로만 분할할 수 있습니다. 최종 배열에 한두 개가 남을 때까지 홀수와 짝수를 나누면 정렬이 시작되고 결과가 반환되며, 이 결과를 하나씩 비교하여 병합합니다. 왜 이 방법이 이렇게 복잡할까 생각하실 수도 있는데, 항상 첫 번째 방법을 사용하면 안 되나요? 사실 당연히 가능하지만, 이 세상에는 아직도 성능이라는 단어가 있습니다. 계산된 결과 시간은 차이가 없습니다. 데이터가 수억 또는 수십억이면 여전히 첫 번째 방법을 사용할 자신감이 있습니까? 실제로 js의 알고리즘은 많은 문제를 작은 문제로 나누어서 정복하는 것입니다. 해결하다.

위 내용은 JavaScript 알고리즘의 정렬 방법 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿