冒泡排序将相邻记录的关键字成对进行比较,如果颠倒则进行交换,大的数下沉,直到最大的数出现在数组的末尾。函数交换(&$x,&$y){$temp=$x;$x=$y;$y=$temp;}functionbubble_sort(&$arr){//php的数组被认为是基本类型,所以必须通过传递引用来修改原始数组for($i=0;$i$arr[$j+1]){swap($arr[$j],$arr[$j+1]);}}}}改进风险第一层冒泡排序循环不变,第二层循环冒泡由后变前。这样在冒泡过程中尽量转发小数据。functionbubble_sort(&$arr){for($i=0;$i$i;$j--){如果($arr[$j-1]>$arr[j]){swap($arr[j-1],$arr[j]);}}}}插入排序在已有函数中插入一条记录insertion_sort(&$arr){//php数组在排序后的有序列表中被视为基本类型,因此必须通过传递引用for($i)来修改原始数组=1;$i=0&&$arr[$j]>$temp;$j--){$arr[$j+1]=$arr[$j];}$arr[$j+1]=$temp;}}选择性排序通过比较n-i条关键字记录,在n-i+1条记录中找到最小的,并与第i条记录函数交换select_sort(&$arr){for($i=0;$i$i;$j--){如果($arr[$j]<$arr[$min]){$min=$j;}}if($min!=$i){swap($arr[$i],$arr[$min]);为什么插入排序比冒泡排序好?两种算法的时间复杂度都是O(n^2),但是有风险的冒泡排序每次交换记录都需要3次赋值操作,而插入排序因为有哨兵变量,所以只有一步赋值操作,减少了排序时间。汇总和比较排序算法都是就地排序算法,空间复杂度为O(1),其中冒泡排序和插入排序不会交换equals记录,所以这两种排序是稳定排序,选择排序只记录最小值值最后交换,所以会破坏相对顺序,选择排序不是一个稳定的算法。