首頁 後端開發 php教程 php四种基础算法代码实例_PHP教程

php四种基础算法代码实例_PHP教程

Jul 13, 2016 am 10:25 AM
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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
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 24, 2023 am 08:15 AM

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

PHP中如何進行知識表示和自動生成演算法? PHP中如何進行知識表示和自動生成演算法? May 22, 2023 pm 08:10 PM

隨著網路的普及和應用的不斷擴大,程式語言的發展也變得越來越重要。 PHP作為一種非常流行的程式語言,也在不斷的發展中。 PHP開發者在使用PHP進行程式設計的過程當中,可能會面對到需要對一些知識進行表示,以及需要進行自動生成演算法的問題。那麼,PHP如何進行知識表示和自動生成演算法呢?以下本文將會對此進行探討。一、知識表示知識表示是人工智慧領域中非常重要的一個問題。知

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和Vue在腦圖功能的核心演算法 深入理解PHP和Vue在腦圖功能的核心演算法 Aug 15, 2023 pm 01:00 PM

深入理解PHP和Vue在腦圖功能中的核心演算法引言:在現代的網路時代,我們經常使用各種各樣的應用程式來幫助我們組織和管理資訊。腦圖是一種常見且實用的資訊組織方式,它能夠將複雜的思考過程以圖形化的方式展示出來。在本文中,我們將著重討論PHP和Vue在腦圖功能中的核心演算法,並給出程式碼範例。一、腦圖的特徵腦圖是一種以中心主題為核心,透過樹狀結構來展示與該主題相關的

PHP中的演算法和資料結構 PHP中的演算法和資料結構 May 25, 2023 am 08:51 AM

PHP是一種廣泛應用的開發語言,常用於Web應用程式的開發。然而,Web應用程式往往需要處理大量的數據,包括資料的處理、儲存和查詢等等,因此,在PHP中應用演算法和資料結構是非常關鍵的技術。演算法是一種在電腦程式設計中用來解決問題的通用方法。在程式設計中,我們透過設計和實作演算法來解決問題,從而提高程式的效率、可維護性和可擴展性。常用的演算法包括排序、搜尋、分治、貪心等等

See all articles