JS 빠 른 정렬 알고리즘 구현
빠 른 순 서 는 C. A. R. Hoare 가 1962 년 에 제출 했다.그의 기본 사상 은 한 번 의 정렬 을 통 해 정렬 할 데 이 터 를 독립 된 두 부분 으로 나 누 는 것 이다. 그 중에서 일부분 의 모든 데 이 터 는 다른 부분의 모든 데이터 보다 작다. 그 다음 에 이 방법 에 따라 이 두 부분의 데 이 터 를 각각 신속하게 정렬 하고 전체 정렬 과정 을 거 쳐 재 귀적 으로 진행 하여 전체 데 이 터 를 질서 있 는 서열 로 바 꿀 수 있다.
빠 른 정렬 은 거품 정렬 알고리즘 에 대한 개선 입 니 다. 거품 알고리즘 은 독자 들 이 낯 설 지 않 을 것 입 니 다.일상 코딩 생활 에서 즐겨 듣 는 정렬 알고리즘 은 시간 복잡 도 는 O (n * n) 이 고 그 중에서 n 은 배열 의 길이 이다.거품 정렬 과 마찬가지 로 빠 른 정렬 도 원래 주소 정렬 이 므 로 추가 메모리 교환 장치 1 개 만 있 으 면 됩 니 다.
배열 Array [1, N] 를 가정 하고 빠 른 정렬 을 사용 하여 정렬 하 는 핵심 적 인 사 고 는 배열 Array 에서 하나의 값 을 특징 값 으로 하 는 것 이다. 실적 평가 전에 반드시 기준 이 있 는 것 처럼 이 값 은 기준 이다. 모든 것 이 그의 왼쪽 에 있 고 모든 것 이 그의 오른쪽 에 있다. 그러면 배열 은 Array [1, keyIndex - 1], key, Array 로 나 뉜 다.[keyIndex + 1] 을 한 다음 에 Array [1, keyIndex - 1] 과 Array [keyIndex + 1] 를 이 원칙 에 따라 계속 분할 배열 하면 최종 적 으로 얻 은 서열 은 반드시 왼쪽 에서 오른쪽 순서 로 증가 하 는 서열 로 정렬 목적 을 완성 할 것 이다.
다음은 알고리즘 절 차 를 간단하게 설명 합 니 다.
(아래 코드 는 본인 테스트 를 거 쳐 nodejs 환경 으로 실행 할 수 있 습 니 다)
/**
* Created by cluo on 2017/2/22.
*/
var arr = [5,2,4,6,1,3];
//var arr = [6,5,4,3,2,1];
/**
* , , ,
* @param arr :
* @param start :
* @param end :
* */
function partition(arr,start,end) {
//
if(start >= end){
return;
}
//
var key = arr[end];
//
var left = start;
var right = end - 1;
// ,
while (left <= right){
//
while(arr[left] <= key){
left++;
}
//
while(arr[right] > key){
right--;
}
//
if(left >= right){
break;
}else{
//
exchange(arr,left,right);
}
}
// ,
if(left <= end){
exchange(arr,left,end);
//
partition(arr,start,left - 1);
partition(arr,left + 1,end);
}else{
// ,
partition(arr,start,end - 1);
}
}
/**
* 2
* */
function exchange(arr,i,j) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
/**
*
* @param arr :
* @param flag : or
* */
const quickSort = function(arr) {
partition(arr,0,arr.length - 1);
};
//
quickSort(arr);
빠 른 정렬 알고리즘 은 현재 비교적 빠 른 정렬 알고리즘 이 고 공간 에 대한 점용 이 비교적 적 지만 불안정 하 며 알고리즘 의 효율 은 소스 데이터 의 특징 에 큰 영향 을 받는다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.