目錄
#基本思想:
圖解:
程式碼:
總結:
首頁 後端開發 php教程 【PHP面試】面試必問的兩個簡單排序演算法解說:冒泡排序與快速排序

【PHP面試】面試必問的兩個簡單排序演算法解說:冒泡排序與快速排序

Apr 17, 2019 pm 04:03 PM
php面試 冒泡排序 快速排序

一般應對面試,我們無可厚非的去刷下面試題。對於PHP開發者來說,除了要熟悉自己所做的項目,還有懂的基本的演算法。以下來分享下PHP面試中常會問到的演算法:冒泡排序與快速排序。

 

冒泡排序:一一比較排序

#基本思想:

重複走訪過要排序的元素列,依序比較兩個相鄰的元素,如果他們的順序(如從大到小)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。

 

圖解:

1.第一次:拿著陣列的第一個元素,分別從第二個元素開始比較,如果前面的元素比後面的元素大,則交換兩個元素,得到較大的這個值,繼續向後比較,直到數組元素的最後,實現一次冒泡(冒泡一次,就得到目前「剩餘」數組的最大值,並且放到數組的「最後面」)

2.第二次開始,還是從第一個元素開始比較,但是只比較到數組長度要-1位置,每次的比較次數都依序-1

3.後面重複比較,直到最後沒有需要一堆數字需要比較

程式碼:

$arr = array(3,2,6,0,1,4,7);
        //因为排序需要每次将一个元素与数组的其他元素进行比较,所以需要两层循环来控制
        //外层循环控制冒泡次数
        //内存循环比较每次的大小,得到每次的最大值(泡)
 
        for($i = 0,$length = count($arr);$i < $length;$i++){
        
                 //内存循环
                 for($j = 0;$j < ($length - $i - 1);$j++){
                         //拿着j变量所对应的数组元素,与后面的元素进行比较
                         if($arr[$j] > $arr[$j + 1]){
                                  //交换位置
                                  $temp              = $arr[$j];
                                  $arr[$j]           = $arr[$j+1];
                                  $arr[$j+1]         = $temp;
                         }
                 }
        }
登入後複製

總結:

冒泡排序最好的時間複雜度是O(n),雖然說它不是最優的演算法,但是這是我們經常接觸到的,面試也會問到,所以我們一定要懂的基本原理,能理解到,能寫的出來

 

#快速排序:用空間換時間

#基本思想:

透過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個資料變成有序序列。

圖解:

 

 

找到目前陣列中的任一個元素,作為標準,新兩個空數組,遍歷整個數組元素,遍歷到的元素比當前元素要小,那麼放到左邊的數組;如果要大,放到另外一個數組中

遞歸思路

1.遞歸點:如果兩個陣列的元素大於1,就需要再進行分解

2.遞迴出口:陣列元素變成1的時候

程式碼:

//待排序数组
        $arr = array(5,3,8,2,6,4,7);
        //函数实现快速排序
        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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱工具

記事本++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教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
Java資料結構與演算法:深入詳解 Java資料結構與演算法:深入詳解 May 08, 2024 pm 10:12 PM

資料結構與演算法是Java開發的基礎,本文深入探討Java中的關鍵資料結構(如陣列、鍊錶、樹等)和演算法(如排序、搜尋、圖演算法等)。這些結構透過實戰案例進行說明,包括使用陣列儲存分數、使用鍊錶管理購物清單、使用堆疊實現遞歸、使用佇列同步執行緒以及使用樹和雜湊表進行快速搜尋和身份驗證等。理解這些概念可以編寫高效且可維護的Java程式碼。

用 C++ 函數指標改造程式碼:提升效率和可重複使用性 用 C++ 函數指標改造程式碼:提升效率和可重複使用性 Apr 29, 2024 pm 06:45 PM

函數指標技術可提升程式碼效率和可重複使用性,具體表現為:提升效率:使用函數指標可減少重複程式碼,優化呼叫過程。提高可重複使用性:函數指標允許使用通用函數處理不同數據,提高程式的可重複使用性。

PHP 數組自訂排序演算法的編寫指南 PHP 數組自訂排序演算法的編寫指南 Apr 27, 2024 pm 06:12 PM

如何寫自訂PHP數組排序演算法?冒泡排序:透過比較和交換相鄰元素來排序數組。選擇排序:每次選擇最小或最大元素並與目前位置交換。插入排序:逐一插入元素到有序部分。

Java快速排序技巧及注意事項 Java快速排序技巧及注意事項 Feb 25, 2024 pm 10:24 PM

掌握Java快速排序的關鍵技巧和注意事項快速排序(QuickSort)是一種常用的排序演算法,其核心思想是透過選擇一個基準元素,將待排序序列分割成獨立的兩部分,其中一部分的所有元素均小於基準元素,另一部分的所有元素都大於基準元素,然後對這兩部分分別進行遞歸排序,最終得到有序序列。雖然快速排序在平均情況下的時間複雜度為O(nlogn),但在最壞情況下會退化為O

如何實作C#中的冒泡排序演算法 如何實作C#中的冒泡排序演算法 Sep 19, 2023 am 11:10 AM

如何實作C#中的冒泡排序演算法冒泡排序是一種簡單但有效的排序演算法,它透過多次比較相鄰的元素並交換位置來排列一個陣列。在本文中,我們將介紹如何使用C#語言實作冒泡排序演算法,並提供具體的程式碼範例。首先,讓我們來了解冒泡排序的基本原理。演算法從數組的第一個元素開始,與下一個元素進行比較。如果當前元素比下一個元素大,則交換它們的位置;如果當前元素比下一個元素小,則保持

用Python怎麼實現快速排序 用Python怎麼實現快速排序 Dec 18, 2023 pm 03:37 PM

用Python實現快速排序的方法:1、定義一個名為quick_sort的函數,使用遞歸的方法來實現快速排序;2、檢查數組的長度,如果長度小於等於1,則直接傳回數組,否則,選擇數組中的第一個元素作為樞紐元素(pivot),然後將數組分成比樞紐元素小和比樞紐元素大的兩個子數組;3、將這兩個子數組和樞紐元素連接起來,形成排序好的數組即可。

分析 Go 語言中的時間複雜度與空間複雜度 分析 Go 語言中的時間複雜度與空間複雜度 Mar 27, 2024 am 09:24 AM

Go語言是一種越來越流行的程式語言,它被設計成易於編寫、易於閱讀和易於維護的語言,同時也支援高階程式設計概念。時間複雜度和空間複雜度是演算法和資料結構分析中重要的概念,它們衡量一個程式的執行效率和占用記憶體大小。在本文中,我們將重點分析Go語言中的時間複雜度和空間複雜度。時間複雜度時間複雜度是指演算法執行時間與問題規模之間的關係。通常用大O表示法來表示時間

各種 PHP 數組排序演算法的複雜度分析 各種 PHP 數組排序演算法的複雜度分析 Apr 27, 2024 am 09:03 AM

PHP陣列排序演算法複雜度:冒泡排序:O(n^2)快速排序:O(nlogn)(平均)歸併排序:O(nlogn)

See all articles