php排序算法2(快速排序)

经典排序算法的php实现

算法原理:

快速排序(Quicksort)是对冒泡排序的一种改进。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
算法是:1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],并与key交换;
4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],与key交换;
5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。
找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。) 

function quickSort($arr){

       if (count($arr) < 1){

           return $arr;

       }

       $key = $arr[0];

       $left_arr = array();

       $right_arr = array();   

       for($i=1; $i < count($arr); $i++){

           if($arr[$i] <= $key){

               $left_arr[] = $arr[$i];

           } else {

               $right_arr[] = $arr[$i];

           }

       }

       

       $left_arr = quickSort($left_arr);

       $right_arr = quickSort($right_arr);

       return array_merge($left_arr, array($key), $right_arr);

   }

   

   $arr = array(11,-3,51,-7,9,100,2,-56,32,21);

   $arr2= quickSort($arr);

   foreach ($arr2 as $key=>$value){

       echo $value."  ";

   }

  • 发表于 2016-06-14 22:07
  • 阅读 ( 486 )

你可能感兴趣的文章

相关问题

1 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章