zoukankan      html  css  js  c++  java
  • PHP四大经典排序算法源码

    PHP四大经典排序算法源码

    --仅供参考 欢迎点评

    <?php
    header("Content-Type:text/html; charset=utf-8");

    // ****************************************************************
    //快速排序:每次取一个比较值$key(即相应数组的$arr[0]),然后依次比较数组中的数,比比较值大的放右边并重命名为$right[],比比较值小的放左边并重命名为$left[]。再递归调用函数最后将$left[],$key,$right[]合并输出。
    function quickSort($arr){
    $n = count($arr);
    if ($n<1) {return $arr;}
    //给比较值赋值
    $key = $arr[0];
    //声明数组左、右数组
    $left = array();
    $right = array();
    //数组中其他的数与比较值比较并赋给$left[]或$right[].
    for($i = 1;$i < $n;$i++){
    if($arr[$i] <= $key){
    $left[] = $arr[$i];
    }else{
    $right[] = $arr[$i];
    }
    }
    //递归调用quickSort()函数排序每个子数组.
    $left = quickSort($left);
    $right = quickSort($right);
    //最后将$left[],$key,$right[]合并输出。
    return array_merge($left,array($key),$right);
    }

    // ****************************************************************
    //冒泡排序:每次比较和交换相邻的两个数直到比较末尾,即每次比较后将当前最大的数冒泡到了最后。一共冒泡n-1次。
    function bubbleSort($arr){
    $n=count($arr);
    if ($n<1) {return $arr;}
    //冒泡趟数外循环n-1次。
    for($i=0;$i<$n-1;$i++){
    //每趟循环中比较和交换次数的内循环(n-(i+1))次。
    for($j=$i+1;$j<$n;$j++){
    //判断并将大的数交换到后面
    if($arr[$i]>$arr[$j]){
    $temp = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $temp;
    }
    }
    }
    return $arr;
    }

    // ****************************************************************
    //选择排序:在数组中,将最小的数通过比较放在第一个位置,然后将剩下的数最小的放在第二个位置,知道将最大的放在最后。
    function selectSort($arr){
    $n = count($arr);
    if ($n<1) {return $arr;}
    //外层循环 先假设第一个数是最小的 并将位置赋给$m
    for($i=0;$i<$n;$i++){
    $m=$i;
    //内循环 找出余下最小值并将位置也赋给$m
    for($j=$i+1;$j<$n;$j++){
    if($arr[$j]<$arr[$m]){ //$arr[$m]是动态变化的,这里不能写成了$[$i]!
    $m=$j;
    }
    }
    //比较找出的最小值是不是与该层第一个数不相等,不相等就交换,否则第一个就是最小的。
    if($arr[$m]!=$arr[$i]){
    $temp=$arr[$m];
    $arr[$m]=$arr[$i];
    $arr[$i]=$temp;
    }
    }
    return $arr;
    }

    // ****************************************************************
    //插入排序:
    function insertSort($arr) {
    $n = count($arr);
    if ($n<1) {return $arr;}
    for($i=1;$i<$n; $i++){
    $tmp = $arr[$i];
    //内层循环控制,比较并插入
    for($j=$i-1;$j>=0;$j--) {
    if($tmp < $arr[$j]) {
    //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
    $arr[$j+1] = $arr[$j];
    $arr[$j] = $tmp;
    } else {
    //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
    break;
    }
    }
    }
    return $arr;
    }

    //数组定义、赋值
    $arr0 = array(23,43,45,434,-7687,990,5,111,23);
    echo "原数组是:23 43 45 434 -7687 990 5 111 23<br/>";

    //1.调用快速排序
    $arr1 = quickSort($arr0);
    echo "快速排序的结果是:";
    foreach ($arr1 as $value){
    echo $value."&nbsp;";
    }
    echo "<br/>";

    //2.调用冒泡排序
    $arr2 = bubbleSort($arr0);
    echo "冒泡排序的结果是:";
    foreach ($arr2 as $value){
    echo $value."&nbsp;";
    }
    echo "<br/>";

    //3.调用选择排序
    $arr3=selectSort($arr0);
    echo "选择排序的结果是:";
    foreach ($arr3 as $value) {
    echo $value."&nbsp;";
    }
    echo "<br/>";

    //4.调用插入排序
    $arr4=insertSort($arr0);
    echo "插入排序的结果是:";
    foreach ($arr4 as $value) {
    echo $value."&nbsp;";
    }
    echo "<br/>";
    ?>

  • 相关阅读:
    Hibernate的检索
    Java 多线程
    可信软件开发
    Linux复习3
    Linux复习2
    Linux复习1
    使用Sourcetree(for windows)建立github同步仓库
    Session技术
    Cookie技术
    Ajax技术
  • 原文地址:https://www.cnblogs.com/wxgthinking/p/5809971.html
Copyright © 2011-2022 走看看