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