时间复杂度:
最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
最坏时间复杂度:O(n2)
稳定性:稳定
原理与实现:
我们假设将要被排序的数组$array具有如下初始值:
$array = [34,23,4,7,13,43,6,12,56,2];
我们按照从小到大的顺序来排列,实现后的数组:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 7 [4] => 12 [5] => 13 [6] => 23 [7] => 34 [8] => 43 [9] => 56 )
如果有N个元素,我们就要进行N-1趟比较,每次将最大的放在后面。这儿数组有10个元素,所以我们要进行9趟比较:
$length = count($array);
for($i = 0,$len = $length - 1; $i < $len; $i++){
}
外层循环进行9次比较,每次我们将从元素的第一个和该元素下一个进行比较,每次比较次数是N-该趟次数,比如进行了第5趟比较了,我们只需要对9-5=4次比较,因为后面的元素已经比较排序好了:
for($i = 0,$len = $length - 1; $i < $len; $i++){
for($j = 0; $j < $len - $i; $j++){
}
}
每趟的每一次比较,我们将二者教大的往后移:
$array = [34,23,4,7,13,43,6,12,56,2];
$length = count($array);
for($i = 0,$len = $length - 1; $i < $len; $i++){
for($j = 0; $j < $len - $i; $j++){
if($array[$j] > $array[$j + 1]){
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
最后就得到了排序结果:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 7 [4] => 12 [5] => 13 [6] => 23 [7] => 34 [8] => 43 [9] => 56 )