日期:2014-05-17 浏览次数:20507 次
外部排序法:
由于数据过大,内存无法处理这么大的数据,而要将大数据进行拆分成小数据进行排序就是外部排序。要借助磁盘存放文件。
排序算法:插入排序法。
以将数组从小到大排列为例,首先将待排序的数组看成两部分:开头部分是有序数组。默认长度为1,即下标为0的元素。后面的所有元素构成了无序数组,每次将无序数组的第一个元素$arr[i]添加到有序数组中,如果$arr[i]大于$arr[i-1];则直接将该元素添加到末尾(即不做任何改动),如果$arr[i]小于$arr[i-1],则将$arr[i]插入到有序数组的合适位置,当有序列表达到原数组大小时,排序过程结束。
排序效率:
冒泡排序<选择排序<插入排序
效率越快,占用系统资源就越多。快速排序法速度很快,但由于涉及到很多的递归调用,会占用很多内存。
插入排序代码示例:
$arr = array(-2,3,5,4,9,7,15,11,1,6);echo count($arr)-1 ;
for($i=1;$i<count($arr);$i++){//sort from small num to large
if($arr[$i]>$arr[$i-1]){continue;}
for($j=0;$j<$i;$j++){
if($arr[$i]<$arr[$j]){
$temp=$arr[$i];
for($k=$i;$k>=$j;$k--){
$arr[$k]=$arr[$k-1];
}
$arr[$j]=$temp;
}
}echo"<br />".print_r($arr)."<br />";
}
快速排序法:
function quicksort($seq) {
if(count($seq) > 1) {
$k = $seq[0];
$x = array();
$y = array();
for ($i=1; $i<count($seq); $i++) {
if ($seq[$i] <= $k) {
$x[] = $seq[$i];
} else {
$y[] = $seq[$i];
}
}
$x = quicksort($x); 对数组x进行排序
$y = quicksort($y);
return array_merge($x, array($k), $y);