php实现快速排序的三种方法分享_php实例
写了三种php快速排示例,第一种效率低但最简单最容易理解,第二个是算法导论上提供的单向一次遍历找中值方法,第三种是双向遍历找中值经典快排算法。三组算法实现和比较如下:
方法一:该方法比较直观,但损失了大量的空间为代价,使用了效率较低的merge函数。在三种方法中效率最低。最坏情况下算法退化为(O(n*n))
function quick_sort($array) {
if(count($array) $key = $array[0];
$rightArray = array();
$leftArray = array();
for($i = 1; $i if($array[$i] >= $key) {
$rightArray[] = $array[$i];
} else {
$leftArray[] = $array[$i];
}
}
$leftArray = quick_sort($leftArray);
$rightArray = quick_sort($rightArray);
return array_merge($leftArray, array($key), $rightArray);
}
方法二:该算法来自算法导论,叫作Nico Lomuto方法(感兴趣goole上有详细说明)使用最经典的单方向一次遍历找到中值。
但这种算法在最坏情况下(例如值相同的数组,需要n-1次划分,每一次划分需要O(n) 时间去掉一个元素)最坏情况下为O(n*n)
function quick_sort(&$array, $start, $end) {
if ($start >= $end) return;
$mid = $start;
for ($i = $start + 1; $i if ($array[$i] $mid++;
$tmp = $array[$i];
$array[$i] = $array[$mid];
$array[$mid] = $tmp;
}
}
$tmp = $array[$start];
$array[$start] = $array[$mid];
$array[$mid] = $tmp;
quick_sort($array, $start, $mid - 1);
quick_sort($array, $mid + 1, $end);
}
方法三:该方法基本上是教科书式的常见写法,首先从左向右遍历小于中间元素的跳过,同时从右向左遍历遇到大的元素跳过,然后
如果没有交叉着交换两边值,继续循环,直到找到中间点。注意该方法在处理相同元素的时候,仍旧交换,这样在最坏情况下也有O(nlogn)
效率。但下面的函数中,如果将$array[$right] > $key 改成 $array[$right] >=$key 或将 $array[$left]
情况不但会堕落为O(n*n).而且除了每次比较的消耗外,还会产生n次交互的额外开销。该题还有另外两个考点,针对死记硬背的同学:
1:中间的两个while可否互换。当然不能互换,因为对于快盘需要一个额外的空间保存初始的左值,这样左右互换的时候,先用右边覆盖已经保存
为中值的左值,否则会出现问题。见这句$array[$left] = $array[$right];
2:$array[$right] = $key; 该语句含义可否省略。该句不能省略,大家可以考虑一个极端情况比如两个值的排序(5,2),逐步看下就明白了。
function quick_sort_swap(&$array, $start, $end) {
if($end $key = $array[$start];
$left = $start;
$right = $end;
while($left while($left $key)
$right--;
$array[$left] = $array[$right];
while($left $left++;
$array[$right] = $array[$left];
}
$array[$right] = $key;
quick_sort_swap(&$array, $start, $right - 1);
quick_sort_swap(&$array, $right+1, $end);
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Python에서 빠른 정렬을 구현하는 방법: 1. Quick_sort라는 함수를 정의하고 재귀적 방법을 사용하여 빠른 정렬을 구현합니다. 2. 배열의 길이가 1보다 작거나 같으면 배열을 직접 반환합니다. 그렇지 않으면 배열을 선택합니다. 첫 번째 요소는 피벗 요소(피벗)로 사용되며, 배열은 피벗 요소보다 작고 피벗 요소보다 큰 두 개의 하위 배열로 나뉩니다. 정렬된 배열을 형성하는 피벗 요소입니다.

Java 퀵 정렬(QuickSort)의 핵심 기술과 주의 사항을 숙지하세요. 퀵 정렬(QuickSort)은 일반적으로 사용되는 정렬 알고리즘입니다. 핵심 아이디어는 벤치마크 요소를 선택하여 정렬할 시퀀스를 두 개의 독립적인 부분으로 나누고 하나의 요소를 모두 포함하는 것입니다. 부분이 기본 요소보다 작고 다른 부분의 모든 요소가 기본 요소보다 큰 경우 두 부분이 재귀적으로 정렬되어 최종적으로 순서가 지정된 시퀀스가 얻어집니다. 퀵소트는 평균적으로 O(nlogn)의 시간 복잡도를 가지지만, 최악의 경우에는 O(nlogn)으로 퇴보합니다.

퀵 정렬의 Java 구현 및 성능 분석 퀵 정렬(QuickSort)은 매우 일반적으로 사용되는 효율적인 정렬 알고리즘입니다. 분할 및 정복(Divide and Conquer) 아이디어입니다. 이 알고리즘은 배열을 두 개의 하위 배열로 나눈 다음 두 개의 하위 배열을 각각 정렬하고 마지막으로 전체 배열을 정렬된 시퀀스로 바꿉니다. 퀵 정렬은 대규모 데이터 처리 시 탁월한 성능을 발휘합니다. 퀵 정렬은 재귀적으로 구현됩니다. 기본 아이디어는 다음과 같습니다. 기본을 선택합니다.

Java Quick Sort 기능의 구현 원리 및 최적화 Quick Sort는 분할 정복 방법을 통해 큰 문제를 여러 개의 작은 문제로 나누고 하위 문제를 재귀적으로 해결하여 최종적으로 전체 솔루션을 얻는 효율적인 정렬 알고리즘입니다. . 빠른 정렬에서는 벤치마크 요소를 선택하고 배열을 두 부분으로 나누어야 합니다. 한 부분은 벤치마크 요소보다 작고 다른 부분은 벤치마크 요소보다 큽니다. 그런 다음 하위 문제당 하나의 요소만 남을 때까지 두 부분을 빠르게 다시 정렬합니다. 마지막으로 모든 하위 문제에 대한 솔루션을 결합하여 배열을 얻습니다.

빠른 정렬 방법: 1. Java 샘플 파일을 만듭니다. 2. QuickSort 메서드를 통해 빠른 정렬 알고리즘을 구현합니다. 3. 배열의 요소를 피벗(피벗)으로 선택하고 배열을 두 개의 하위 배열로 나눕니다. 피벗보다 큰 요소를 포함하는 요소 더 작은 요소, 다른 요소는 피벗 요소보다 큰 요소를 포함하고 빠른 정렬 알고리즘이 두 하위 배열에 재귀적으로 적용됩니다. 4. 기본 배열에서 배열을 정렬합니다. 메소드를 실행하고 결과를 출력합니다.

PHP는 매우 인기 있는 프로그래밍 언어이며 웹 개발에 널리 사용됩니다. PHP에서 배열은 매우 일반적인 데이터 유형이자 매우 강력한 데이터 구조입니다. 이 때문에 PHP는 개발자가 배열을 처리하고 조작하는 데 도움이 되는 다양한 배열 함수를 제공합니다. 여기에는 배열을 빠르게 정렬하는 데 도움이 되는 빠른 정렬 기능이 포함되어 있습니다. 퀵 정렬(Quick Sort)은 일반적인 정렬 알고리즘으로, 비교와 교환을 통해 배열을 두 개의 하위 배열로 나눈 다음 재귀적으로 수행하는 것입니다.

Java에서 빠른 정렬 알고리즘을 구현하는 방법 빠른 정렬(QuickSort)은 일반적으로 사용되는 효율적인 정렬 알고리즘입니다. 기본 아이디어는 분할 정복 전략(Divide and Conquer)을 채택하는 것입니다. 한 번에 하나의 요소를 벤치마크 값으로 선택하여 정렬할 배열을 두 부분으로 나누고, 한 부분은 벤치마크 값보다 작습니다. 다른 부분은 벤치마크 값보다 크며 두 부분은 별도로 재귀 정렬되어 최종적으로 전체 배열이 정렬됩니다. 아래에서는 Java 언어를 사용하여 빠른 정렬을 수행하는 방법을 자세히 소개합니다.

Java Quick Sort의 성능 분석 및 비교 Quick Sort(QuickSort)는 빠른 실행 속도와 좋은 성능으로 인해 실제 개발에서 널리 사용되는 비교 기반 정렬 알고리즘입니다. 이 기사에서는 Java의 빠른 정렬 알고리즘에 대한 성능 분석을 수행하고 이를 다른 일반적인 정렬 알고리즘과 비교할 것입니다. 퀵 정렬 알고리즘의 원리 퀵 정렬은 분할 정복 방식의 아이디어를 채택하여 정렬할 데이터를 두 개의 독립적인 부분으로 나누어 왼쪽 및 오른쪽 하위 시퀀스를 반복적으로 정렬하여 전체 시퀀스의 질서를 달성합니다.
