天天看點

PHP 排序算法原理及總結

冒泡排序原理

原理描述:

一次比較倆個相鄰的元素,大的元素後移,小的元素前移(交換位置)。直到找出最大的元素。就像是氣泡一樣,大的向下沉,小的向上冒。

流程:

有一個無序數組 $arr = [8, 9, 3, 6, 1, 4]

PHP 排序算法原理及總結
總結:

  1. 外層循環要元素數 - 1次。負責找出最大值。
  2. 内層循環逐層遞減一次。負責倆倆相比較,交換元素位置。

代碼:

PHP 排序算法原理及總結

快速排序原理(遞歸)

從數組中取第一個值作為參照物,比這個值小的放在左邊,比這個值大的放在右邊,這樣就會有倆個新的數組,遞歸處理倆個數組,然後左邊,參照物,右邊合并。注意:有遞歸就要找到遞歸出口,不然就會一直遞歸下去。

用文字叙述流程太麻煩,就從網上找了一個圖檔,過程很清晰。

PHP 排序算法原理及總結

代碼:

PHP 排序算法原理及總結

插入排序

将要排序的數組分成倆個部分,取數組第一個元素放有序集合中,剩下的放到無序集合中。将需要排序的數,與前面已經排好序的資料從後往前進行比較,直到找到小于或者等于它的數,使其插入到相應的位置。

我的記憶方法:

假設有倆個箱子,第一個箱子是透明并且是空的,要用來裝有序元素,第二個箱子是不透明并且是滿的,裝無序元素。(其實裝什麼都行,你喜歡的讓你容易記住的最好)。

1.第一步:在不透明箱子裡随便拿一個元素,直接扔到透明的箱子裡

2.第二步:再從不透明的箱子裡拿出一個元素,放進透明箱子裡前,做比較。如果大就放後面,如果小就放前面。

3.重複第二步,但是我們每次需要比較的次數增加了,因為透明箱子裡元素多了,直到找到合适的位置。

PHP 排序算法原理及總結
PHP 排序算法原理及總結

選擇排序

每次一次從數組中取出最小元素或者最大元素,放到指定位置。

第一步:給第一個元素一個聖火令,和後面到每個元素比較,(我是取最小元素)。遇到比它小到元素就把這個聖火令給它,知道把聖火令交給最小元素手裡。

第二步:交換位置,聖火令交給第二哥元素,重複第一步。

PHP 排序算法原理及總結
PHP 排序算法原理及總結

上就是PHP 排序算法原理及總結的詳細内容,更多請關注php技術交流群:

link