首页 > 代码库 > 算法入门之快速排序
算法入门之快速排序
快速排序原理:
快速排序先把等待排序的集合打乱顺序,把第一个元素作为基准元素,为第二个元素和最后一个元素分配两个指针i和j,如果a[i]小于基准元素则i++,如果a[j]大于基准元素则j--,这样把大于基准元素的a[i]和小于基准元素的a[j]互换,以此类推,最终把基准元素与a[j]相交换,就得到一个a[j]左侧全部小于a[j],右侧全部大于a[j]的一个近似有序数组,然后按照如上步骤重新寻找每个被a[j]分开的数组中的分隔点,最终得到有序数组。
在通用排序中,一般都会选取快速排序来解决问题。
具体实现算法如下;
<?php function less($m, $n) { return $m < $n; } function exch(&$a, $i, $j) { $tmp = $a[$i]; $a[$i] = $a[$j]; $a[$j] = $tmp; } function partition(&$a, $lo, $hi) { $i = $lo; $j = $hi+1; while(true) { while(less($a[++$i], $a[$lo])) if($i == $hi) break; while(less($a[$lo], $a[--$j])) if($j == $lo) break; if($i >= $j) break; exch($a, $i, $j); } exch($a, $lo, $j); return $j; } function fastSort(&$a, $lo, $hi) { if($lo >= $hi) return; $j = partition($a, $lo, $hi); fastSort($a, $lo, $j-1); fastSort($a, $j+1, $hi); } $a = array(6, 4, 3, 9, 5, 2, 0, 8, 1, 7); shuffle($a); print_r($a); fastSort($a, 0, 9); print_r($a);排序结果:
array(0,1,2,3,4,5,6,7,8,9);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。