zoukankan      html  css  js  c++  java
  • 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));

  • 相关阅读:
    编译内核时出现drivers/mfd/mxchdmicore.c:36:24: fatal error: mach/clock.h: No such file or directory
    IE中iframe标签显示在DIV之上的问题解决方案
    Linux驱动学习1.hello world;
    Maven安装与配置(转)
    Jmeter阶梯式压测
    Jmeter的分布式测试
    adb connect命令连接多个Android设备
    Linux当中文件的显示命令
    软件测试流程
    测试时间不够,该怎么办?
  • 原文地址:https://www.cnblogs.com/phplhs/p/4352189.html
Copyright © 2011-2022 走看看