<?php
1.插入排序
思想:
每次將乙個待排序的資料元素插入到前面已經排好序的數列中,使數列依然有序,知道待排序資料元素全部插入完為止。
示例:
[初始關鍵字] [49] 38 65 97 76 13 27 49
j=2(38) [38 49] 65 97 76 13 27 49
j=3(65) [38 49 65] 97 76 13 27 49
j=4(97) [38 49 65 97] 76 13 27 49
j=5(76) [38 49 65 76 97] 13 27 49
j=6(13) [13 38 49 65 76 97] 27 49
j=7(27) [13 27 38 49 65 76 97] 49
j=8(49) [13 27 38 49 49 65 76 97]
時間複雜度:
如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序演算法的時間複雜度為o(n^2)。因而,插入排序不適合對於資料量比較大的排序應用。但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。
//插入排序
function insertsort($arr)
}return $arr;
2.選擇排序
思想:每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。
示例:
[初始關鍵字] [49 38 65 97 76 13 27 49]
第一趟排序後 13 [38 65 97 76 49 27 49]
第二趟排序後 13 27 [65 97 76 49 38 49]
第三趟排序後 13 27 38 [97 76 49 65 49]
第四趟排序後 13 27 38 49 [49 97 65 76]
第五趟排序後 13 27 38 49 49 [97 97 76]
第六趟排序後 13 27 38 49 49 76 [76 97]
第七趟排序後 13 27 38 49 49 76 76 [ 97]
最後排序結果 13 27 38 49 49 76 76 97
時間複雜度:
時間複雜度為o(n2),不穩定排序,適合規模比較小的
//選擇排序
function selectsort($arr)
$temp=$arr[$i];
$arr[$i]=$arr[$k];
$arr[$k]=$temp;
}return $arr;
}3.氣泡排序
思想:
兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反時即進行交換,直到沒有反序的資料元素為止。
示例:
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97
時間複雜度:
該演算法的時間複雜度為o(n2)。但是,當原始關鍵字序列已有序時,只進行一趟比較就結束,此時時間複雜度為o(n)。
//氣泡排序
function bubblesort($arr)
} if(! $flag)//本趟排序未發生交換,提前終止演算法
return $arr;
}//return $arr;
}4.快速排序
思想:
通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
時間複雜度:
快速排序主體演算法時間運算量約 o(log2n) ,劃分子區函式運算量約 o(n) ,所以總的時間複雜度為 o(nlog2n) ,它顯然優於氣泡排序 o(n2). 可是演算法的優勢並不是絕對的。試分析,當原檔案關鍵字有序時,快速排序時間複雜度是 o(n2), 這種情況下快速排序不快。而這種情況的氣泡排序是 o(n), 反而很快。在原檔案記錄關鍵字無序時的多種排序方法中,快速排序被認為是最好的一種排序方法。
//快速排序
function quicksort($arr)
$arr = array(1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20);
$value = 8;
echo binarysearch($arr, $value);
php陣列排序(二分法)
近日,看到一關於php陣列排序的問題,居然在瞬間沒有想出如何實現!真的是有點丟分呢。於是想起csdn上曾有一篇文章說過只有20 的人能夠實現二分查詢,看來我在那20 之外了 於是想了一下,得出以下實現演算法,供大家借鑑。class sortnum function desctruct public ...
二分法排序C
首先說一下二分法排序的原理,演算法思想簡單描述 在插入第i個元素時,對前面的0 i 1元素進行折半,先跟他們 中間的那個元素比,如果小,則對前半再進行折半,否則對後半 進行折半,直到left right,然後再把第i個元素前1位與目標位置之間 的所有元素後移,再把第i個元素放在目標位置上。二分法排序...
利用二分法排序
include int main 將array陣列的前兩個數按大小賦給new陣列的前兩個元素 new 0 array 0 array 1 array 0 array 1 new 1 array 0 array 1 array 0 array 1 m 2 新陣列new的有效個數 for i 2 i 1...