PHP에서 일반적으로 사용되는 알고리즘은 무엇입니까?

(*-*)浩
풀어 주다: 2023-02-24 09:54:01
원래의
4525명이 탐색했습니다.

PHP에는 버블 정렬, 퀵 정렬, 선택 정렬, 삽입 정렬 등 4가지 기본 알고리즘이 있습니다.
1: 버블 정렬 방법

PHP에서 일반적으로 사용되는 알고리즘은 무엇입니까?

소개:

(권장 학습: PHP 프로그래밍 시작하기 마스터하기 )

버블 정렬은 간단한 정렬 알고리즘입니다. 정렬할 시퀀스를 반복적으로 살펴보고 두 요소를 차례로 비교하고 순서가 잘못된 경우 교체합니다. 더 이상 교환이 필요하지 않을 때까지 시퀀스를 방문하는 작업이 반복됩니다. 이는 시퀀스가 ​​정렬되었음을 의미합니다. 이 알고리즘의 이름은 점점 더 작은 요소가 스와핑을 통해 배열의 맨 위로 천천히 "부동"된다는 사실에서 유래되었습니다.

단계:

①: 인접한 요소를 비교합니다. 첫 번째 요소가 두 번째 요소보다 크면 둘 다 교체합니다.

②: 첫 번째 쌍에서 시작하여 마지막 쌍으로 끝나도록 인접한 요소의 각 쌍에 대해 동일한 작업을 수행합니다. 이때 마지막 요소가 가장 큰 숫자가 되어야 합니다. 3: 가장 많은 요소를 제외한 모든 요소에 대해 위 단계를 반복합니다.

4: 더 이상 요소가 없을 때까지 매번 점점 더 적은 요소에 대해 위 단계를 계속 반복합니다. 숫자 쌍을 비교해야 함

특정 코드:

$arr=array(1,43,54,62,21,66,32,78,36,76,39);
  function bubbleSort ($arr)
  {
  $len = count($arr);
  //该层循环控制 需要冒泡的轮数
  for ($i=1; $i<$len; $i++) {
  //该层循环用来控制每轮 冒出一个数 需要比较的次数
  for ($k=0; $k<$len-$i; $k++) {
  if($arr[$k] > $arr[$k+1]) {
  $tmp = $arr[$k+1]; // 声明一个临时变量
  $arr[$k+1] = $arr[$k];
  $arr[$k] = $tmp;
  }
  }
  }
  return $arr;
  }
로그인 후 복사

2: 선택 정렬 방법

#🎜 🎜 #선택 정렬은 간단하고 직관적인 정렬 알고리즘입니다. 작동 원리는 다음과 같습니다. 먼저 정렬되지 않은 시퀀스에서 가장 작은 요소를 찾아서 정렬된 시퀀스의 시작 위치에 저장한 다음, 정렬되지 않은 나머지 요소에서 가장 작은 요소를 계속 찾습니다. 그런 다음 정렬 순서의 마지막에 넣으십시오. 모든 요소가 정렬될 때까지 계속됩니다.

특정 코드:

  //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
  function select_sort($arr) {
  //$i 当前最小值的位置, 需要参与比较的元素
  for($i=0, $len=count($arr); $i<$len-1; $i++) {
 //先假设最小的值的位置
  $p = $i;
  //$j 当前都需要和哪些元素比较,$i 后边的。
  for($j=$i+1; $j<$len; $j++) {
  //$arr[$p] 是 当前已知的最小值
 if($arr[$p] > $arr[$j]) {
 //比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。
 $p = $j;
 }
 }
 //已经确定了当前的最小值的位置,保存到$p中。
 //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
 if($p != $i) {
 $tmp = $arr[$p];
 $arr[$p] = $arr[$i];
 $arr[$i] = $tmp;
 }
 }
 //返回最终结果
 return $arr;
 }
로그인 후 복사
3: 삽입 정렬

삽입 정렬의 알고리즘 설명은 간단하고 직관적인 정렬 알고리즘. 정렬되지 않은 데이터의 경우 정렬된 순서로 뒤에서 앞으로 스캔하여 해당 위치를 찾아 삽입합니다.

삽입 정렬 구현에서는 일반적으로 내부 정렬(즉, O(1) 추가 공간만 필요한 정렬)이 사용됩니다. 따라서 뒤에서 앞으로 스캔하는 동안 이미 배열된 요소들은 점차적으로 뒤로 이동하여 최신 요소가 삽입될 수 있는 공간을 제공합니다.

단계:

① 첫 번째 요소부터 요소가 정렬된 것으로 간주할 수 있습니다.

② 다음 요소를 꺼내고 정렬된 요소 순서에서 뒤에서 앞으로 스캔

3(정렬된) 요소가 새 요소보다 큰 경우 해당 요소를 다음 위치로 이동# 🎜🎜#4정렬된 요소가 새 요소보다 작거나 같은 위치를 찾을 때까지 ③단계를 반복합니다

⑤해당 위치에 새 요소를 삽입

⑥2단계 반복

특정 코드:

  function insert_sort($arr)
  {
  $len=count($arr);
  for($i=1; $i<$len; $i++) {
 //获得当前需要比较的元素值。
  $tmp = $arr[$i];
  //内层循环控制 比较 并 插入
  for($j=$i-1; $j>=0; $j--) {
  //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素 
    if($tmp < $arr[$j]) {
 //发现插入的元素要小,交换位置
 //将后边的元素与前面的元素互换
     $arr[$j+1] = $arr[$j];
 //将前面的数设置为 当前需要交换的数
     $arr[$j] = $tmp;
     } else {
 //如果碰到不需要移动的元素
 //由于是已经排序好是数组,则前面的就不需要再次比较了。
     break;
     }
 }
 }
 //将这个元素 插入到已经排序好的序列内。
 //返回
 return $arr;
 }
로그인 후 복사

4: 빠른 정렬

# 🎜 🎜#소개:

퀵 정렬은 Tony Hall이 개발한 정렬 알고리즘입니다. 평균적으로 n개 항목을 정렬하려면 O(n log n) 비교가 필요합니다.

최악의 경우 O(n2) 비교가 필요하지만 이런 상황은 흔하지 않습니다. 실제로 퀵 정렬은 내부 루프가 대부분의 아키텍처에서 효율적으로 구현될 수 있고 대부분의 실제 데이터의 경우 2차적으로 필요한 시간을 줄이는 설계 선택을 결정할 수 있기 때문에 다른 O(n log n) 알고리즘보다 훨씬 빠른 경우가 많습니다. .

단계:

①'기준'이라고 불리는 시퀀스에서 요소를 선택합니다.

②에서 반복 순서를 정렬하면 기준선보다 작은 모든 요소는 기준선 앞에 배치되고 기준선보다 큰 모든 요소는 기준선 뒤에 배치됩니다(동일한 숫자가 양쪽에 배치될 수 있음). 이 파티션이 종료된 후 베이스는 시퀀스의 중간에 있습니다. 이것을 파티션 작업이라고 합니다

3기준값보다 작은 요소의 하위 배열과 기준값보다 큰 요소의 하위 배열을 재귀적으로 정렬

특정 코드:

  function quick_sort($arr)
  {
  //判断参数是否是一个数组
  if(!is_array($arr)) return false;
  //递归出口:数组长度为1,直接返回数组
  $length = count($arr);
  if($length<=1) return $arr;
  //数组元素有多个,则定义两个空数组
  $left = $right = array();
 //使用for循环进行遍历,把第一个元素当做比较的对象
 for($i=1; $i<$length; $i++)
 {
 //判断当前元素的大小
 if($arr[$i]<$arr[0]){
 $left[]=$arr[$i];
 }else{
 $right[]=$arr[$i];
 }
 }
 //递归调用
 $left=quick_sort($left);
 $right=quick_sort($right);
 //将所有的结果合并
 return array_merge($left,array($arr[0]),$right);
 }
로그인 후 복사

위 내용은 PHP에서 일반적으로 사용되는 알고리즘은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!