当前位置: 代码迷 >> PHP >> 插入排序、快速排序跟php面向对象的知识
  详细解决方案

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

热度:201   发布时间:2016-04-28 20:42:00.0
插入排序、快速排序和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);

  }else {

   return $seq;

  }

}

$arr = array(12,2,16,30,8,28,4,10,20,6,18);

print_r(quicksort($arr));

 

同一页面有多个表单,在提交给php处理时就不知道是哪个表单,这时通过给每个表单设置一个name值相同value不同的隐藏控件。通过查看隐藏控件的value值来判断是提交了哪个表单

 

php面向对象编程思想

php对象在内存中的区域:php对象名和对象存放的位置是不一样的,这一点和java是一模一样的,所以在php面向对象部分你完全可以套用java的思想去做。对象存放在堆区(heap)而对象名则和其他普通变量一样存放在栈里面。注意对象名本身是一个指向对象的引用,也就是它的值其实是它所指向的对象的地址,所以你可以更改它指向的对象来使它指向完全不同的对象,同理,一个对象可以有多个对象名,但要注意,通过修改其中的一个对象名的成员属性就会导致其他对象名所指向的成员属性也发生变化。

基本类型变量和对象名是存放在桟区的,而对象是存放在堆区的。然后对象名是引用,也就是值是地址,而基本类型变量只有添加&地址符才表示地址。注意this关键字的运用,特别是区分类的成员变量和成员函数里的局部变量。

  相关解决方案