冒泡 選擇 插入 快速排序演算法小解

2021-08-15 23:19:05 字數 1407 閱讀 4221

假設待排序陣列$arr=array(9,5,3,6,7,1);(從小到大排序)

1、氣泡排序

氣泡排序的思想是每一趟找出最大的那個(最大的泡泡),經過count($arr)-1趟,得出最後的順序

因為要得到最大的那個數,所以需要兩層迴圈,外層表示進行的趟數,內層迴圈來進行比較、交換

即第一趟5,3,6,7,1,9

第二趟5,3,6,1,7,9

第三趟5,3,1,6,7,9

第四趟3,1,5,6,7,9

第五趟1,3,5,6,7,9

故**為

function bubble_sort($arr) 

第一趟1   9和1交換

第二趟1  3     5和3交換

第三趟1  3  5   5不動

第四趟1  3  5  6    6不動

第五趟1  3  5  6  7     7不動(完成)

選擇排序的思想是先讓9和其餘數字進行比較,找出最小的,和9互換位置,然後讓5和其餘數字進行比較,找出最小的,互換位置,以此類推,直到最後兩個數字比較完成後,就得到了排序完成的陣列

用打擂的方式理解就是10個座位,分別對應十個人,先讓第乙個人和其餘人比武,選出第一名,並交換位置(排名賽),然後第二個人和其餘人比武,以此類推。。。

可以得出**

function select_sort($arr)elseelse

7 }8 9 for(int i = 0; i < n; i++)

12 13 printf("done"); //執行了1次按上面推導"大o階"的步驟我們先來第一步:"用常數1取代執行時間中的所有加法常數",則上面的算式變為:

執行總次數 = 2n^2 + 4n + 1;

第二步:"在修改後的執行次數函式中,只保留最高端項",這裡的最高端項是n的二次方

所以算式變為:

執行總次數 = 2n^2;

第三步:"如果最高端項存在且不是1,則去除與這個項相乘的常數",這裡n的二次方不是1所以

要去除這個項相乘的常數算式變為:

執行總次數 = n^2;

因此,最後我們得到上面的那段**的演算法時間複雜度表示為: o(n^2); 

巢狀一層for迴圈的時間複雜度為:o(n),二層for迴圈為o(n^2),二分的演算法時間複雜度為:o(logn),如果乙個for迴圈套乙個二分,那麼時間複雜度為o(nlogn);

備註:這裡只是通過乙個數理化的形式來比較演算法的時間執行效率,並不能真正推導出演算法在特定機器的執行時間,這取決於具體的電腦和**。

php 冒泡 選擇 插入 快速排序演算法

1.氣泡排序法 思路分析 法如其名,就是像冒泡一樣,每次從陣列當中 冒乙個最大的數出來。arr array 2,32,51,68,66,100,78,10 function getpao arr return arr 2.選擇排序法 選擇排序法思路 每次選擇乙個相應的元素,然後將其放到指定的位置。f...

排序(冒泡,選擇,插入,快速)

氣泡排序func bubblesort s int int return s 選擇排序 選擇是排序也屬於內部排序法,是從欲排序的資料中,按指定的規則選出某一元素,經過和其他元素重整,再依原則交換位置後達到排序目的。第一次從r 0 r n 1 中選出最小值,與r 0 交換,第二次從r 1 r n 1 ...

幾種排序演算法總結(冒泡 選擇 插入 快速)

今天總結了幾個比較基礎常用的排序演算法。寫下來,以後可以直接參考。var o return arr 插入排序 穩定 假設待排序的記錄存放在陣列r 1 n 中,初始時,r 1 自成乙個有序區,不需要比較,無序區r 2.n 從i 2起到i n為止,依次將r i 插入當前有序區。帶插入的記錄r i 從右向...