>  기사  >  백엔드 개발  >  함수를 사용하지 않고 PHP에서 배열을 정렬하는 방법

함수를 사용하지 않고 PHP에서 배열을 정렬하는 방법

PHPz
PHPz원래의
2023-04-27 09:03:10691검색

PHP는 배열 정렬을 용이하게 하는 많은 강력한 기능을 갖춘 널리 사용되는 프로그래밍 언어입니다. 그러나 어떤 경우에는 함수를 사용하지 않고 배열을 정렬해야 할 수도 있습니다. 이 기사에서는 함수를 사용하지 않고 PHP에서 배열을 정렬하는 방법에 대해 설명합니다.

1. 버블 정렬 방법

버블 정렬은 인접한 요소를 비교하여 순서가 잘못된 경우 교체하는 간단한 정렬 알고리즘입니다. 길이가 n인 배열의 경우 최대 n-1 라운드의 비교 및 ​​교환 작업이 수행됩니다. 각 라운드 후에 정렬되지 않은 영역의 테일 요소는 정렬된 영역의 헤드 요소가 됩니다.

다음은 오름차순을 예로 들어 PHP를 사용하여 버블 정렬을 구현하는 코드입니다.

function bubbleSort(&$arr){
    $len = count($arr); //获取数组长度
    for($i=0;$i<$len-1;$i++){ //需要比较n-1轮
        for($j=0;$j<$len-$i-1;$j++){ //每一轮需要比较n-i-1次
            if($arr[$j]>$arr[$j+1]){ //如果前一个元素大于后一个元素,交换位置
                $tmp = $arr[$j+1];
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
}

위 코드의 시간 복잡도는 O(n^2)이므로 최적의 정렬 알고리즘은 아닙니다. 그러나 경우에 따라 버블 정렬의 코드 구현은 비교적 간단하며 작은 배열을 정렬하는 데 사용할 수 있습니다.

2. 선택 정렬 방법

선택 정렬은 정렬할 시퀀스에서 가장 작은(또는 가장 큰) 요소를 선택하여 정렬된 시퀀스의 마지막에 배치하는 간단한 정렬 알고리즘입니다. 길이가 n인 배열의 경우 n-1 라운드의 비교 및 ​​교환 작업이 필요합니다. 각 비교 라운드 후에 순서가 지정되지 않은 영역의 머리 요소는 순서가 지정된 영역의 꼬리 요소가 됩니다.

다음은 오름차순을 예로 들어 PHP를 사용하여 선택 정렬을 구현하는 코드입니다.

function selectSort(&$arr){
    $len = count($arr);//获取数组长度
    for($i=0;$i<$len-1;$i++){//需要比较n-1轮
        $minIndex=$i;//用来存储最小元素的下标
        for($j=$i+1;$j<$len;$j++){
            if($arr[$j]<$arr[$minIndex]){//如果有小于当前最小值的元素,更新minIndex
                $minIndex=$j;
            }
        }
        //将最小元素和无序区域的头部元素交换位置
        $tmp = $arr[$minIndex];
        $arr[$minIndex] = $arr[$i];
        $arr[$i] = $tmp;
    }
}

위 코드의 시간 복잡도는 O(n^2)이므로 최적의 정렬 알고리즘은 아닙니다. 그러나 선택 정렬 방법은 구현이 간단하고 이해하기 쉬우며 작은 배열을 정렬하는 데 사용할 수 있습니다.

3. 삽입 정렬 방법

삽입 정렬은 이미 정렬된 순서에 데이터 조각을 삽입하는 간단한 정렬 알고리즘입니다. 길이가 n인 배열의 경우 n-1 라운드의 비교 및 ​​이동 작업이 필요합니다. 각 비교 라운드 후에 순서가 지정되지 않은 영역의 머리 요소는 순서가 지정된 영역의 꼬리 요소가 됩니다.

다음은 오름차순을 예로 들어 PHP를 사용하여 삽입 정렬을 구현하는 코드입니다.

function insertSort(&$arr){
    $len = count($arr);//获取数组长度
    for($i=1;$i<$len;$i++){//需要将n-1个元素插入到有序区域
        $tmp = $arr[$i];//用一个临时变量存储待插入的元素
        for($j=$i-1;$j>=0;$j--){//将tmp插入到合适的位置
            if($tmp<$arr[$j]){
                $arr[$j+1]=$arr[$j];//将大于tmp的元素向后移动一位
            }else{
                break;//找到了合适的位置,退出循环
            }
        }
        $arr[$j+1]=$tmp;//将tmp插入到合适的位置
    }
}

위 코드의 시간 복잡도는 O(n^2)이므로 최적의 알고리즘은 아닙니다. 그러나 삽입 정렬 방법은 구현이 간단하며 작은 배열 및 부분적으로 정렬된 배열을 정렬하는 데 사용할 수 있습니다.

4. 빠른 정렬 방법

빠른 정렬은 한 번의 정렬을 통해 배열을 두 개의 하위 시퀀스로 나누는 것입니다. 오른쪽 하위 시퀀스가 ​​참조 요소보다 작고 둘 다 기본 요소보다 크면 왼쪽 및 오른쪽 하위 시퀀스가 ​​재귀적으로 정렬되고 마지막으로 두 개의 정렬된 하위 시퀀스가 ​​하나의 정렬된 시퀀스로 병합됩니다. 퀵 정렬의 시간복잡도는 O(nlogn)입니다.

다음은 PHP를 사용하여 오름차순을 사용하여 빠른 정렬을 구현하는 코드입니다.

function quickSort(&$arr,$left,$right){
    if($left<$right){
        $i=$left;$j=$right;//选择一个基准元素,初始化左右指针
        $pivot=$arr[$i];//将基准元素存储到临时变量pivot
        while($i<$j){
            while($i<$j && $arr[$j]>=$pivot){//逆序查找比基准元素小的元素
                $j--;
            }
            if($i<$j){
                $arr[$i++]=$arr[$j];
            }
            while($i<$j && $arr[$i]<=$pivot){//顺序查找比基准元素大的元素
                $i++;
            }
            if($i<$j){
                $arr[$j--]=$arr[$i];
            }
        }
        $arr[$i]=$pivot;//将基准元素插入到左右子序列的交界处
        quickSort($arr,$left,$i-1);//对左子序列递归排序
        quickSort($arr,$i+1,$right);//对右子序列递归排序
    }
}

위 코드의 시간 복잡도는 O(nlogn)이며 이는 더 나은 정렬 알고리즘입니다. 퀵 정렬의 구현 과정은 더 복잡하지만 성능이 가장 좋고 다양한 크기의 배열을 정렬하는 데 사용할 수 있습니다.

요약:

위에서는 PHP 함수를 사용하지 않고 배열을 정렬하는 네 가지 방법을 소개합니다. 버블 정렬, 선택 정렬, 삽입 정렬 및 빠른 정렬입니다. 실제 응용에서는 배열의 크기와 정렬 요구 사항에 따라 적절한 정렬 알고리즘을 선택할 수 있습니다. 이러한 알고리즘은 PHP에 내장된 기능에 의존하지 않지만 실제 사용에서는 실행 시간, 메모리 사용량 등의 문제를 고려해야 한다는 점에 유의해야 합니다.

위 내용은 함수를 사용하지 않고 PHP에서 배열을 정렬하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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