一、冒泡排序
大O符号:order,译为阶,也可以理解为数量级。
冒泡排序原理步骤
每一轮排序找到最大的值,放在数组的最后,并且,排好序的数不再参与下一轮的排序;
每一轮的排序规则是:每次从第一个数开始,与其右边的数进行比较,大的值放到右边,右边的值再依次往下进行比较,直到进行到未排序数的最后一个数为止;
排序的结束:当未排序的数只有一个时,就完成了排序。
冒泡排序伪代码
数组长度:lengthfunction bubble_sort(&$a){ $i从0到length-1 $j从0到length-1-$i //$i表示经过$i次循环后已排好序的个数,length-1-$i表示对未排序的数进行排序 //对$a[$j]和$a[$j+1]排序 //随着$j递增,较大的数参与下一次排序,直到比较到最后一个未排序数 如果$a[$j]>$a[$j+1],交换两数值
代码实现
$a[$j+1]) swap($a[$j],$a[$j+1];}$arr = array(4,8,1,9,3,7,6,2);bubble_sort($arr);print_r($arr);
排序次数
冒泡排序是与插入排序拥有相等的运行时间,但是两种算法在需要的交换次数却很大地不同。在最好的情况,冒泡排序需要O(n^2)次交换,而插入排序只要最多O(n)交换。
特点
最易理解,实现最简单,但是对于少数元素之外的数列排序是很没有效率的。
参考: