背景知識:
排序演算法算是比較基礎的演算法了,但是在面試過程中偶爾也會被問到,雖然很多語言都內建了排序函式,例如php的sort函式等等,但是還是有必要聊聊排序演算法,這篇文章中將介紹時間複雜度為o(n^2)的幾個排序演算法。
本文基於從小到大排序講解。
1.氣泡排序:前乙個和後乙個比較,如果前乙個比後乙個大則交換位置,繼續向下比較。如果前乙個比後乙個小則不交換位置,繼續向下比較。
//氣泡排序
class bubble
//交換兩個值的位置
protected function swap($left,$right)
//冒泡核心演算法:注意外層迴圈,一趟遍歷之後最後乙個元素為最大值也是排序之後應該在的位置
//因此下一趟排序就不需要考慮最後乙個值,因此是$end--
public function getbubblesort()
//for($end=count($this->array)-1;$end>0;$end--)}}
return $this->array;
}}$bubble=new bubble(array(2,1,8,3,6,5));
var_dump($bubble->getbubblesort());
2.選擇排序:序列中最小的值和起始位置的值交換
<?php
class select
protected function swap($left,$right)
//選擇排序的核心演算法:注意內層迴圈是從$i+1開始的
public function getselectsort()
$this->swap($i,$minindex);
}return $this->array;
}}$select=new select(array(2,1,4,7,6,5));
var_dump($select->getselectsort());
3.插入排序:當前位置的值和前乙個位置的值比較,如果比前乙個位置的值小,則交換位置,然後再向前乙個位置的值比較,直到比前乙個位置的值大,則本躺迴圈結束。
<?php
//插入排序簡單的邏輯就是當前元素和之前的元素比較
class insert
protected function swap($left,$right)
//插入排序的核心演算法:外層迴圈$i從1開始,因為要保證前乙個位置每越界
//內層迴圈從$i-1開始。
//這裡有一點需要注意:如果當前位置($j)比後乙個位置($j+1)要小,內層迴圈就直接結束了,因為$j之前位置的值也一定比$j+1位置的值要小
public function getinsertsort()
}return $this->array;
}}$select=new insert(array(2,1,4,7,6,5,2));
var_dump($select->getinsertsort());
以上就是時間複雜度為o(n^2)的幾個排序演算法了。 三種時間複雜度為O(n 2)的排序演算法
1.氣泡排序 基本思想 依次比較相鄰元素,若前面的大於後面的就交換元素,在一次迭代中將最大的元素 沉降 到最後的位置,經過n 1次迭代即可完成排序目的。public static void bubblesort int data if bfinished 上述 是優化後的氣泡排序,我們知道在一次迭代...
演算法之時間複雜度
前言 學習這東西,很枯燥也很煩,參考許多博文,選了許多。結合一些東西,記錄一下,也是為了以後回顧學習。演算法效率 說到演算法效率 不得不提兩個指標,那就是 時間複雜度 空間複雜度 好的演算法應該具備時間效率高和儲存量低的特點。計算機能快速完成大量複雜的資料處理,但是要完成這個工作,計算機也是需要一定...
演算法之 時間複雜度和空間複雜度
平時用的少,經常忘記,這裡記錄下時間複雜度的概念 複雜度是演算法的一種標記方法。用o表示,通常讀為big o o的包含了時間複雜和空間複雜度 這裡就只說時間複雜度。時間複雜度的概念,個人總結,可能不太準確。時間複雜度,即標記乙個問題,隨著問題規模的變化,所需要花費時間的關係。時間複雜度就是問題規模和...