排序演算法之時間複雜度為O N 2 的演算法

2021-09-02 08:06:33 字數 1542 閱讀 3746

背景知識:

排序演算法算是比較基礎的演算法了,但是在面試過程中偶爾也會被問到,雖然很多語言都內建了排序函式,例如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的包含了時間複雜和空間複雜度 這裡就只說時間複雜度。時間複雜度的概念,個人總結,可能不太準確。時間複雜度,即標記乙個問題,隨著問題規模的變化,所需要花費時間的關係。時間複雜度就是問題規模和...