算法入门之快速排序
2014-05-11 23:23
274 查看
快速排序原理:
快速排序先把等待排序的集合打乱顺序,把第一个元素作为基准元素,为第二个元素和最后一个元素分配两个指针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);
快速排序先把等待排序的集合打乱顺序,把第一个元素作为基准元素,为第二个元素和最后一个元素分配两个指针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);
相关文章推荐
- 对于快速排序的总结(摘自算法入门)
- 算法入门--快速排序
- 算法入门-快速排序-基本快速排序方法
- 【计蒜客】基础算法入门之快速排序
- ACM_算法竞赛经典入门_ 强烈推荐的一本好书
- 基础算法2——冒泡排序和快速排序
- 【算法竞赛入门经典】DAG上的动态规划 例题9-2 UVa437
- 【索引】算法竞赛入门经典-第9章 动态规划初步
- 从三色旗算法到快速排序
- 【广告算法工程师入门 4】从商业变现指标体系谈谈互联网的闲事
- 算法竞赛入门经典-第五章因子和阶乘
- 文本分类入门(十)特征选择算法之开方检验
- 第十六周项目1-(4)验证算法快速排序
- (转)(Step1-500题)UVaOJ(算法比赛入门经典+挑衅编程)+USACO
- 2013-5-13算法入门--分治排序
- 排序算法之快速排序
- 算法竞赛入门经典第四章习题4-8 Extraordinarily Tired Students UVA - 12108
- 蓝桥杯算法 入门 Fibonacci数列
- 9.28 算法入门STL初步 vector set
- 快速排序(quicksort)算法实现