>웹 프론트엔드 >JS 튜토리얼 >JS Hill 정렬 및 빠른 정렬 구현 방법

JS Hill 정렬 및 빠른 정렬 구현 방법

小云云
小云云원래의
2017-12-14 09:03:451311검색

이 글은 주로 JS 정렬 알고리즘의 Hill 정렬과 퀵 정렬의 구현 방법을 소개하며, JavaScript 구현 기술이 필요한 친구들이 참고할 수 있기를 바랍니다. 그것은 모두에게 도움이 될 수 있습니다.

언덕 정렬:

간격 순서를 정의합니다(예: 5, 3, 1). 처음 처리될 때는 간격이 5인 모든 요소가 처리되고, 다음 번에는 간격이 3인 요소가 처리되며, 마지막에는 간격이 1인 요소가 처리됩니다. 즉, 인접한 요소는 표준 삽입 정렬을 수행합니다.

마지막 처리가 시작될 때 대부분의 요소가 올바른 위치에 있으며 알고리즘은 요소를 삽입하는 것보다 더 발전된 많은 요소를 교체할 필요가 없습니다.

시간 복잡도O(n*logn)

function shellSort(){
  var N=arr.length;
  var h=1;
  while(h<N/3){
    h=3*h+1;//设置间隔
  }
  while(h>=1){
    for(var i=h; i<N; i++){
      for(j=i; j>=h && arr[j]<arr[j-h]; j-=h){
        swap(arr, j, j-h);
      }
    }
    h=(h-1)/3;
  }
}
function swap(array, i, j){//两个数调换
  var temp =array[j];
  array[j]=array[i];
  array[i]=temp;
}

빠른 정렬:

데이터를 더 작은 요소와 더 큰 요소를 포함하는 다른 하위 시퀀스로 재귀적으로 분해하고 모든 데이터가 될 때까지 이 단계를 반복합니다. 순서대로.

벤치마크 값을 선택하고, 벤치마크 값보다 작은 값을 배열에 담습니다. 벤치마크 값보다 큰 값은 배열에 배치됩니다.

시간 복잡도O(n*logn)

function quickSort(arr){
  if(arr.length==0){
    return [];
  }
  var left=[];
  var right=[];
  var p=arr[0];
  for(var i=1; i<arr.length; i++){
    if(arr[i]<p){
      left.push(arr[i]);
    }else{
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat(p,quickSort(right));
}

퀵 정렬은 큰 데이터 세트에는 적합하지만, 작은 데이터 세트를 처리할 때는 성능이 저하됩니다.

관련 추천 :

PHP에서 Hill 정렬 알고리즘을 구현하는 방법에 대한 자세한 분석

JavaScript 정렬 알고리즘의 2가지 예 Hill 정렬_기본 지식

JavaScript Hill 정렬, 빠른 정렬, 병합 정렬 알고리즘_javascript 기술


위 내용은 JS Hill 정렬 및 빠른 정렬 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.