快速排序的php实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序的php实现相关的知识,希望对你有一定的参考价值。
再来一个非常高级的排序算法,快速排序...这个算法是很高效的。
快速排序的思路是,找到一个分割点,把原数组分隔成两部分,在分割点左侧的是都比它小的,在它右侧的是都比它大的。然后分别把这两部分再递归调用排序,自然就全部排序完成。
当然最重要的步骤就是切分,然后进行递归调用,重复以上分割操作,直到break。代码示例如下,
<?php // 寻找分割点,并交换值 function slicearr(&$arr, $low, $high){ $i = $low; $j = $high + 1; $choosen = $arr[$low]; while(1){ while($arr[++$i] < $choosen){// 从左边要找大的,把大的交换到右边去 if ($i >= $high) break; } while($arr[--$j] > $choosen){// 从右边要找小的,交换到左边去 if ($j <= $low) break; } if ($i >= $j) break;// 从左往右找,或者从右往左找,注意不能交叉...否则退出循环 $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; // echo ‘<br/>‘,$low,‘ ‘,$high, ‘<br/>‘; } $temp = $arr[$low]; $arr[$low] = $arr[$j]; $arr[$j] = $temp; return $j;// 返回分割点 } // 递归快速排序 function qsort(&$arr, $low, $high){ if ($low >= $high) return; $i = slicearr($arr, $low, $high);// 该步骤的分割点 qsort($arr, $low, $i-1);// 递归调用 qsort($arr, $i+1, $high); } $arr = array(12, 17, 13, 16, 19, 11, 4, 5, 9, 77, 18); shuffle($arr); echo ‘<pre>‘; print_r($arr); qsort($arr, 0, count($arr)-1);// 排序 echo ‘<pre>‘; print_r($arr);
理解快速排序怎么交换值这点尤为关键,这个算法感觉很机智。。加深理解算法中的智慧吧~
以上是关于快速排序的php实现的主要内容,如果未能解决你的问题,请参考以下文章