• php实现的冒泡,插入排序,希尔排序,归并排序


    <?php
    /**
    *选择排序也就是冒泡排序,就是基于各个数据之间的对比来排序
    *
    */
    $arr = array(2,1,7,5,8,9,3,4,10,30,28,24);
    function bubbleSort($arr) {
        $len = count($arr);
        $k = 0;
        for($i=0;$i<$len;$i++){
        $k++;
            for($j=$i+1;$j<$len;$j++) {
                if($arr[$i] > $arr[$j]) {
                    $k++;
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $tmp;
                }
            }
        }
        echo $k;
        return $arr;
    }

    print_r(bubbleSort($arr));

    /**
    *插入排序
    *  插入排序可以避免需要排序的数据中有一部分是已经有序的树据在排序
    *  判断当前位置i后边的数据是否已经有序.
    */

    function insertSort($arr) {
        $len = count($arr);
        $k = 0;
        for($i=1;$i<$len;$i++) {
            $k++;
            //排序 $arr[i],$arr[$i-1],....,$arr[i-n]
            for($j=$i;$j > 0 && ($arr[$j-1] > $arr[$j]);$j--) {
                $tmp = $arr[$j-1];
                $arr[$j-1] = $arr[$j];
                $arr[$j]  = $tmp;
                $k++;
            }
        }
        echo $k;
        return $arr;
    }

    print_r(insertSort($arr));

    /***
    *希尔排序
    * 希尔排序是对插入排序的优化,希尔排序对于大的乱序数据具有很好的处理能力
    *
    */

    function heerSort($arr) {
        $len = count($arr);
        $tmp = '';
        $h = (int)$len/2;
        $k = 0;
        while($h >=1) {
        $k++;
            for($i=$h;$i<$len;$i++) {
                    $k++;//排序 $arr[i],$arr[$i-h],....,$arr[i-n*h]
                for($j=$i;$j >= $h && ($arr[$j-$h] > $arr[$j]);$j--) {
                    $tmp = $arr[$j-$h];
                    $arr[$j-$h] = $arr[$j];
                    $arr[$j]  = $tmp;
                    $k++;
                }
            }
            $h = (int)$h/2;
        }
        echo $k;
     return $arr;
    }
    print_r(heerSort($arr));

    /**
    *快速排序
    *
    */
    function quickSort($arr,$left,$right) {
        if($left === $right) return false;
        $tmp = '';
        $i=$j=0;
        $center = (int)(($left + $right)/2);
        quickSort($arr,$left,$center);
        quickSort($arr,$center+1,$right);
        for($i = $left; $i< $right;$i++) {
            //$arr[$i-1],$arr[$i-2]...$arr[$i-n]相互之间比较
            for($j=$i;$j > 0 && ($arr[$j-1] > $arr[$j]);$j--) {
                    $tmp       = $arr[$j];
                    $arr[$j]   = $arr[$j-1];
                    $arr[$j-1] = $tmp;
                
            }
        }
        return $arr;
    }
    $len = count($arr);
    print_r(quickSort($arr,0,$len));

  • 相关阅读:
    高斯消元模板(通用+异或)
    矩阵快速幂模板
    hdu 6185 递推+矩阵快速幂
    欧几里得小结
    乘法逆元模板
    vijo 1456最小总代价
    MariaDB数据库
    docker基本命令
    std::tuple
    boost::asio
  • 原文地址:https://www.cnblogs.com/phplhs/p/4352189.html
Copyright © 2020-2023  润新知