찾다
백엔드 개발PHP 튜토리얼php四种基础算法代码实例_PHP教程

php四种基础算法:冒泡,选择,插入和快速排序法
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣。作为一个初级phper,虽然很少接触到算法方面的东西 。但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的。下面是我按自己的理解,将四个方法分析一遍。
需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序。
$arr(1,43,54,62,21,66,32,78,36,76,39);

1. 冒泡排序法
 *     思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来。
 *     比如:2,4,1    // 第一次 冒出的泡是4
 *                2,1,4   // 第二次 冒出的泡是 2
 *                1,2,4   // 最后就变成这样

 *   代码实现:

复制代码 代码如下:

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

  $len=count($arr);
  //设置一个空数组 用来接收冒出来的泡
  //该层循环控制 需要冒泡的轮数
  for($i=1;$i  { //该层循环用来控制每轮 冒出一个数 需要比较的次数
    for($k=0;$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        //先假设最小的值的位置
        $p = $i;
        //$j 当前都需要和哪些元素比较,$i 后边的。
        for($j=$i+1; $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.插入排序法
插入排序法思路:将要排序的元素插入到已经 假定排序号的数组的指定位置。

复制代码 代码如下:

function insert_sort($arr) {
    //区分 哪部分是已经排序好的
    //哪部分是没有排序的
    //找到其中一个需要排序的元素
    //这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素
    //利用循环就可以标志出来
    //i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了,
    //间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列
    for($i=1, $len=count($arr); $i        //获得当前需要比较的元素值。
        $tmp = $arr[$i];
        //内层循环控制 比较 并 插入
        for($j=$i-1;$j>=0;$j--) {
   //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素
            if($tmp                 //发现插入的元素要小,交换位置
                //将后边的元素与前面的元素互换
                $arr[$j+1] = $arr[$j];
                //将前面的数设置为 当前需要交换的数
                $arr[$j] = $tmp;
            } else {
                //如果碰到不需要移动的元素
           //由于是已经排序好是数组,则前面的就不需要再次比较了。
                break;
            }
        }
    }
    //将这个元素 插入到已经排序好的序列内。
    //返回
    return $arr;
}

4.快速排序法

复制代码 代码如下:

function quick_sort($arr) {
    //先判断是否需要继续进行
    $length = count($arr);
    if($length         return $arr;
    }
    //如果没有返回,说明数组内的元素个数 多余1个,需要排序
    //选择一个标尺
    //选择第一个元素
    $base_num = $arr[0];
    //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
    //初始化两个数组
    $left_array = array();//小于标尺的
    $right_array = array();//大于标尺的
    for($i=1; $i        if($base_num > $arr[$i]) {
            //放入左边数组
            $left_array[] = $arr[$i];
        } else {
            //放入右边
            $right_array[] = $arr[$i];
        }
    }
    //再分别对 左边 和 右边的数组进行相同的排序处理方式
    //递归调用这个函数,并记录结果
    $left_array = quick_sort($left_array);
    $right_array = quick_sort($right_array);
    //合并左边 标尺 右边
    return array_merge($left_array, array($base_num), $right_array);
}

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824969.htmlTechArticlephp四种基础算法:冒泡,选择,插入和快速排序法 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣。作为一...
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP编程中有哪些常见的算法?PHP编程中有哪些常见的算法?Jun 12, 2023 am 08:30 AM

在PHP编程中,算法是不可或缺的一部分。掌握常见的算法,不仅可以提高代码效率,还可以为后续的程序设计提供帮助。以下是PHP编程中常见的算法:排序算法排序算法是指将一组数据按照一定的规则排列成有序的序列。在PHP编程中,常用的排序算法有冒泡排序、插入排序、选择排序、快速排序等。其中,快速排序是时间复杂度最低的一种排序算法,适合处理大规模的数据。查找算法查找算法

PHP中的数组排序及搜索算法PHP中的数组排序及搜索算法Jun 23, 2023 am 09:45 AM

PHP是一种非常流行的编程语言,它支持各种数据类型和算法,其中数组排序和搜索算法是基本而重要的部分。本文将会介绍PHP中常用的数组排序及搜索算法,以及它们的应用场景和效率分析。一、数组排序PHP中提供了多种数组排序的方法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等等。以下是对其中常用的几种算法的介绍及示例代码:冒泡排序(BubbleSort)冒

PHP中如何进行知识表示和自动生成算法?PHP中如何进行知识表示和自动生成算法?May 22, 2023 pm 08:10 PM

随着互联网的普及和应用的不断扩大,程序语言的发展也变得越来越重要。PHP作为一种非常流行的程序语言,也在不断的发展。PHP开发者在使用PHP进行编程的过程当中,可能会面对到需要对一些知识进行表示,以及需要进行自动生成算法的问题。那么,PHP中如何进行知识表示和自动生成算法呢?下面本文将会对此进行探讨。一、知识表示知识表示是人工智能领域中非常重要的一个问题。知

深入理解PHP和Vue在脑图功能中的核心算法深入理解PHP和Vue在脑图功能中的核心算法Aug 15, 2023 pm 01:00 PM

深入理解PHP和Vue在脑图功能中的核心算法引言:在现代的互联网时代,我们经常使用各种各样的应用程序来帮助我们组织和管理信息。脑图是一种常见且实用的信息组织方式,它能够将复杂的思维过程以图形化的方式展示出来。在本文中,我们将着重讨论PHP和Vue在脑图功能中的核心算法,并给出代码示例。一、脑图的特点脑图是一种以中心主题为核心,通过树状结构来展示与该主题相关的

PHP算法解析:如何使用二分查找算法在有序数组中快速定位元素?PHP算法解析:如何使用二分查找算法在有序数组中快速定位元素?Sep 19, 2023 pm 01:14 PM

PHP算法解析:如何使用二分查找算法在有序数组中快速定位元素?概述:二分查找算法是一种高效的查找算法,它适用于有序数组中查找特定元素。本文将详细介绍二分查找算法的原理,并给出PHP代码示例。原理:二分查找算法通过反复将查找范围缩小一半,从而快速定位目标元素。其流程如下:首先,将查找范围缩小为数组的开头和结尾;然后,计算中间元素的索引,将其与目标元素进行比较;

PHP算法解析:如何使用动态规划算法解决0-1背包问题?PHP算法解析:如何使用动态规划算法解决0-1背包问题?Sep 19, 2023 pm 12:33 PM

PHP算法解析:如何使用动态规划算法解决0-1背包问题?引言:动态规划是一种常用于解决优化问题的算法思想。在程序开发中,0-1背包问题是一个经典的动态规划应用场景。本文将介绍如何使用PHP编写动态规划算法来解决0-1背包问题,并提供具体的代码示例。什么是0-1背包问题?0-1背包问题是一种经典的组合优化问题。题目设定如下:有一个背包,它的容量为C。现有n个物

PHP中的算法和数据结构PHP中的算法和数据结构May 25, 2023 am 08:51 AM

PHP是一种广泛应用的开发语言,常用于Web应用程序的开发。然而,Web应用程序往往需要处理大量的数据,包括数据的处理、存储和查询等等,因此,在PHP中应用算法和数据结构是非常关键的技术。算法是一种在计算机编程中用来解决问题的通用方法。在编程中,我们通过设计和实现算法来解决问题,从而提高程序的效率、可维护性和可扩展性。常用的算法包括排序、搜索、分治、贪心等等

了解PHP数据结构和算法了解PHP数据结构和算法May 24, 2023 am 08:15 AM

PHP是一种广泛应用于Web开发的脚本语言,且在建立动态网站上表现得越来越好。在Web开发中,数据结构和算法的重要性并不低于其他编程范畴,其对于程序运行效率的影响尤为显著。尤其是在涉及大量数据存储和处理,或者对程序性能要求较高的场景下,数据结构和算法成为了不可忽视的一部分。本文主要介绍PHP中一些常用的数据结构和算法。一、数据结构数组PHP数组是一种非常常见

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경