日期:2014-05-17  浏览次数:20507 次

插入排序、快速排序和php面向对象的知识

外部排序法:

由于数据过大,内存无法处理这么大的数据,而要将大数据进行拆分成小数据进行排序就是外部排序。要借助磁盘存放文件。

 排序算法:插入排序法。

以将数组从小到大排列为例,首先将待排序的数组看成两部分:开头部分是有序数组。默认长度为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);