PHP 기반 정렬 원리 및 인 스 턴 스 상세 설명
더미(hep)는 컴퓨터 과학 에서 특수 한 데이터 구 조 를 통칭 하 는 것 으로 보통 나무 로 볼 수 있 는 배열 대상 이다.
{k1,k2,ki,...,kn}(ki<=k2i,ki<=k2i+1)|(ki>=k2i,ki>=k2i+1),(i=1,2,3,4...n/2)
더미 에 대하 여:
4.567917.더미 중의 특정한 노드 의 값 은 항상 아버지 노드 의 값 보다 크 거나 작 지 않다4.567917.무 더 기 는 항상 완전 이 진 트 리(아래)이다4.567917.뿌리 노드 의 가장 큰 더 미 를 최대 더미 또는 큰 뿌리 더미 라 고 부 르 고 뿌리 노드 의 가장 작은 더 미 를 최소 더미 또는 작은 뿌리 더미 라 고 부른다완전 이 진 트 리
쌓 기 서열 이 라 고 하면 완전 이 진 트 리 를 언급 하지 않 을 수 없다.이런 기본 개념 들 은 인터넷 곳곳에 있 는데 나 는 가장 간단 한 것 을 땄 다.
완전 이 진 트 리:마지막 층 을 제외 하고 모든 층 의 노드 수 는 최대 치 에 달 합 니 다.마지막 층 에는 오른쪽 에 있 는 몇 개의 결점 만 부족 하 다.
내 가 정리 한 것 은 바로 다음 과 같은 두 가지 특징 이 있 기 때 문 이 라 고 생각한다.
4.567917.마지막 층 에 빈자리 가 있 고 오른쪽 에 빈자리 가 있 는 것 만 허용 한다.즉,잎 결점 은 층 이 가장 큰 2 층 에서 만 나타 날 수 있다(저장 방식 의 규칙 성)
더미 정렬
쌓 아 올 리 는 순 서 는 큰 지붕 으로 쌓 고 내 리 는 순 서 는 작은 지붕 으로 쌓 아야 한다.
이 예 는 내림차 순 서 를 구 하 는 작은 지붕 더미 로 해석 된다.
쌓 기 정렬 단 계 는 다음 과 같 습 니 다:
1.우 리 는 데이터(49,38,65,97,76,13,27,50)를 배열$arr 로 만 듭 니 다.
2.배열$arr 로 작은 지붕 더 미 를 만 듭 니 다(주요 절 차 는 코드 주석 에서 설명 합 니 다.아래 그림 은 하나의 배열 로 작은 지붕 더 미 를 만 드 는 과정 입 니 다).
3.쌓 인 뿌리(가장 작은 원소)를 마지막 잎 과 교환 하고 쌓 인 길 이 를 하나 줄 이 고 두 번 째 단계 로 뛰 기;
4.2-3 단 계 를 반복 하여 쌓 여 있 는 노드 가 하나 밖 에 없 을 때 까지 정렬 이 완 료 됩 니 다.
정렬 된 PHP 구현
// , 0 , , n 2n+1, 2n+2;
// ,
$arr=array(49,38,65,97,76,13,27,50);
$arrSize=count($arr);
// , 。
buildHeap($arr,$arrSize);
for($i=$arrSize-1;$i>0;$i--){
swap($arr,$i,0);
$arrSize--;
buildHeap($arr,$arrSize);
}
//
function buildHeap(&$arr,$arrSize){
// $index, , "97" , ,
// $index ,
for($index=intval($arrSize/2)-1; $index>=0; $index--){
// , $min
if($index*2+1<$arrSize){
$min=$index*2+1;
// , , , $min
if($index*2+2<$arrSize){
if($arr[$index*2+2]<$arr[$min]){
$min=$index*2+2;
}
}
// , , ,
if($arr[$min]<$arr[$index]){
swap($arr,$min,$index);
}
}
}
}
// $arr $one $another
function swap(&$arr,$one,$another){
$tmp=$arr[$one];
$arr[$one]=$arr[$another];
$arr[$another]=$tmp;
}
다음은 정렬 의 최종 결과 입 니 다.쌓 기 는 전체 정렬 에 사용 되 며,시간 복잡 도 는 O(nlogn)입 니 다.
빠 른 배열 은 전체 정렬 에 사용 되 고 평균 시간 복잡 도 역시 O(nlogn)이다.
그러나 쌓 기 정렬 은 TopK 를 구 할 때 쌓 는 시간의 복잡 도 는 O(Klog 2(n)로 K 라운드 정렬 만 하면 되 기 때문이다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.