冒泡排序法:
基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向小标较小的单元),就像水底的气泡一样逐渐向上冒。
function bubbleSort(&$arr){
//这是一个中间变量;
$temp=0;
//把数组从小到大排列
//外层循环,代表排序回合,6个数5个回合
for($i=1;$i<=count($arr)-1;$i++){
//内层循环,遍历每个回合的元素,每个回合会将最大的数放在下标最大的位置,所以下个回合少比较一个元素
for($j=0;$j
if($arr[$j]>$arr[$j+1]){
//值对换
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
}
$myarr=array(0,5,-1,54,-2.3,12);
//使用函数输出;
bubbleSort($myarr);//传地址,操作等同
print_r($myarr);
结果:Array ( [0] => -2.3 [1] => -1 [2] => 0 [3] => 5 [4] => 12 [5] => 54 )
【注意:数组默认传递的是值,而不是地址(对象默认传递的是地址!)!
class my{
var $a=5;
}
function aa($b){
$b->a=52;
}
$n=new my();
aa($n);
print $n->a;】
选择式排序法:
基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,第三次从R[2]~R[n-1]中选取最小值,与R[2]交换,。。。。。。第i次从R[i-1]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排序的有序序列。
function selectSort(&$arr){
$temp=0;
for($i=0;$i
$minVal=$arr[$i];
//记录认为的最小数的小标
$minIndex=$i;
for($j=$i+1;$j
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
$myarr=array(0,5,-1,45,-12);
//使用选择排序函数输出;
selectSort($myarr);
print_r($myarr);
结果:Array ( [0] => -12 [1] => -1 [2] => 0 [3] => 5 [4] => 45 )
插入排序法
基本思想:把n个待排序的元素看成一个有序表和无序表,开始时有序表中只包含一个元素,无序列表中包含一个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
function insertSort(&$arr){
//先默认下标是0的这个数是有序的,所以从1开始
for($i=1;$i //$insertVal是准备插入的数 $insertVal=$arr[$i]; //准备先和下标是$insertIndex的元素比较 $insertIndex=$i-1; //如果这个条件满足,说明还没有找到适当的位置 while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){ //满足该条件时,把该数后移 $arr[$insertIndex+1]=$arr[$insertIndex]; //循环 $insertIndex--; } //这是已经找到适当的位置,则插入(这里可以继续优化!) $arr[$insertIndex+1]=$insertVal; } } $myarr=array(0,5,-1,45,-12); //使用插入法排序 insertSort($myarr); print_r($myarr); 结果:Array ( [0] => -12 [1] => -1 [2] => 0 [3] => 5 [4] => 45 ) 快速排序法 特点:当数据量很大时,可以快速的排列,得出结果;是这几种排序法中速度最快的一种方法; 缺点:占用内存大; function quickSort($left,$right,&$array){ $l=$left; $r=$right; $pivot=$array[($left+$right)/2]; $temp=0; while($l<$r){ while($array[$l]<$pivot) $l++; while($array[$r]>$pivot) $r--; if($l>=$r) break; $temp=$array[$l]; $array[$l]=$array[$r]; $array[$r]=$temp; if($array[$l]==$pivot) --$r; if($array[$r]==$pivot) ++$l; } if($l==$r){ $l++; $r--; } if($left<$r) quickSort($left,$r,$array); if($right>$l) quickSort($l,$right,$array); } //快速排序法 $array=array(-9,78,0,23,-567,89); quickSort(0,count($array)-1,$array); print_r($array); 结果:Array ( [0] => -567 [1] => -9 [2] => 0 [3] => 23 [4] => 78 [5] => 89 )