>백엔드 개발 >PHP 튜토리얼 >PHP의 일반적인 정렬 예에 대한 자세한 설명

PHP의 일반적인 정렬 예에 대한 자세한 설명

小云云
小云云원래의
2018-03-15 13:21:191307검색

이 글은 주로 PHP에서 자주 사용되는 정렬 예제에 대한 자세한 설명을 공유하며, 주로 코드 형식으로 공유됩니다.

$arr=array(1,43,54,62,21,66,32,78,36,76,39);

1. 버블 정렬

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. 빠른 정렬

  1. 배열에서 "피벗"이라는 요소를 선택합니다.

  2. 모든 요소가 피벗 값보다 작도록 배열을 재정렬합니다. 베이스 앞에 배치되고 베이스 값보다 큰 모든 요소는 베이스 뒤에 배치됩니다(동일한 숫자가 양쪽에 배치될 수 있음). 이 파티션이 종료된 후 베이스는 시퀀스의 중간에 있습니다. 이를 파티션 작업이라고 합니다.

  3. 기본 값보다 작은 요소의 하위 배열과 기본 값보다 큰 요소의 하위 배열을 재귀적으로 정렬합니다.
    $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    functionquick_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                                                                                      ~ 기타                              결과는 병합됩니다
    Return array_m erge($왼쪽,배열($arr[0]),$오른쪽) ;
    }



    3. 선택 정렬


    먼저 정렬되지 않은 시퀀스에서 가장 작은 요소를 찾아 정렬된 시퀀스의 시작 위치에 저장한 다음, 정렬되지 않은 나머지 요소에서 계속해서 가장 작은 요소를 찾은 다음 정렬된 순서의 마지막에 넣으세요. 모든 요소가 정렬될 때까지 계속됩니다.


    //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
    $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    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;
    }

    4. 삽입 정렬

정렬되지 않은 데이터의 경우 정렬된 순서에서 뒤에서 앞으로 스캔하여 해당 위치를 찾아 삽입합니다.


정렬된 것으로 간주할 수 있는 첫 번째 요소부터 시작합니다.

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

If (정렬된) 요소가 새 요소보다 크면 해당 요소를 다음 위치로 이동합니다.
  1. 정렬된 요소가 새 요소보다 작거나 같은 위치를 찾을 때까지 3단계를 반복합니다.
  2. 해당 위치에 새 요소를 추가합니다.
  3. $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    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;
    }

    5 단계를 반복합니다. 사전 정렬(즉, 동일한 값이 배열에 나타나는 횟수)
  4. PHP에는
  5. array_count_values라는 내장 함수가 있습니다. 물론 직접 반복할 수도 있습니다.

  6. 관련 권장 사항:

JavaScript에서 일반적으로 사용되는 기본 정렬 알고리즘에 대한 분석 예

일반적으로 사용되는 정렬 알고리즘의 동적 그래픽 설명

JavaScript_javascript 기술에서 일반적으로 사용되는 9가지 정렬 알고리즘

위 내용은 PHP의 일반적인 정렬 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.