PHP 빠 른 정렬 알고리즘 구현 원리 및 코드 상세 설명
다음 동 도 는 5 분 동안 알고리즘 을 배 워 서 빠 른 정렬 알고리즘 의 원리 와 절 차 를 보 여 줍 니 다.
단계:
배열 에서 기준 치 를 선택 하 십시오.
배열 에서 기준 치 보다 큰 것 을 같은 쪽 에 놓 고 기준 치 보다 작은 것 을 다른 쪽 에 놓 으 며 기준 치 는 중간 위치 에 있 습 니 다.
재 귀적 으로 양쪽 의 배열 을 정렬 하 다.
코드 구현
function quickSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$v = $arr[0];
$low = $up = array();
for ($i = 1; $i < $len; ++$i) {
if ($arr[$i] > $v) {
$up[] = $arr[$i];
} else {
$low[] = $arr[$i];
}
}
$low = quickSort($low);
$up = quickSort($up);
return array_merge($low, array($v), $up);
}
테스트 코드:
$startTime = microtime(1);
$arr = range(1, 10);
shuffle($arr);
echo "before sort: ", implode(', ', $arr), "
";
$sortArr = quickSort($arr);
echo "after sort: ", implode(', ', $sortArr), "
";
echo "use time: ", microtime(1) - $startTime, "s
";
테스트 결과:
before sort: 1, 7, 10, 9, 6, 3, 2, 5, 4, 8
after sort: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
use time: 0.0009009838104248s
시간 복잡 도빠 른 정렬 의 시간 복잡 도 는 최 악의 경우 O(N2),평균 시간 복잡 도 는 O(N*lgN)다.
이 말 은 이해 하기 쉽다.정렬 된 수열 에 N 개의 수가 있다 고 가정 하 자.한 번 옮 겨 다 니 는 시간의 복잡 도 는 O(N)입 니 다.몇 번 옮 겨 다 녀 야 합 니까?최소 lg(N+1)회,최대 N 회.
1)왜 최소한 lg(N+1)회 인가?빠 른 정렬 은 분 치 법 으로 옮 겨 다 니 는 것 입 니 다.우 리 는 이 진 트 리 로 간주 합 니 다.옮 겨 다 니 는 횟수 는 이 진 트 리 의 깊이 입 니 다.완전 이 진 트 리 의 정의 에 따라 그 깊이 는 적어도 lg(N+1)입 니 다.따라서 빠 른 정렬 횟수 는 lg(N+1)회 가 가장 적다.
2)왜 최대 N 번 인가?이것 은 매우 간단 해 야 합 니까?아니면 빠 른 정렬 을 이 진 트 리 로 보 는 것 입 니까?그 깊이 가 가장 큰 것 은 N 입 니 다.따라서 빨리 읽 고 정렬 하 는 횟수 는 최대 N 회 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.