• PHP--冒泡、选择、插入排序法


        使用php来实现常用三种排序方法:

        冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:

        插入排序法的流程图:

            插入排序的代码:

    function InsertSort(&$arr){
        for ($i=1;$i<count($arr);$i++){
            // 带插入的值
            $insertVal = $arr[$i];
            // 要比较的位置下标
            $insertIndex = $i -1;
            while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
                // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
                $arr[$insertIndex+1] = $arr[$insertIndex];
                $insertIndex--;
            }
            // 插入insertVal
            if($insertIndex+1 != $i){
                $arr[$insertIndex+1] = $insertVal;
            }
        }
    }

        下面的三种排序法的代码:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: xxx
     5  * Date: 2016/10/12
     6  * Time: 21:38
     7  */
     8 // 冒泡排序法
     9 function maopao_sort(&$arr){
    10     // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序
    11     for($i=0;$i<count($arr)-1;$i++){
    12         // 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i
    13         for($j=0;$j<count($arr)-1-$i;$j++){
    14             if ($arr[$j] > $arr[$j+1]){
    15                 $temp = $arr[$j+1];
    16                 $arr[$j+1] = $arr[$j];
    17                 $arr[$j] = $temp;
    18             }
    19         }
    20     }
    21 }
    22 
    23 //选择排序法
    24 function SelectSort(&$arr){
    25     for($i=0;$i<count($arr)-1;$i++){
    26         // 假设的最小数
    27         $minVal = $arr[$i];
    28         //最小数的下标
    29         $minIndex = $i;
    30         for($j=$i+1;$j<count($arr);$j++){
    31             if ($minVal>$arr[$j]){
    32                 $minVal = $arr[$j];
    33                 $minIndex = $j;
    34             }
    35         }
    36         if ($i != $minIndex){
    37             $temp = $arr[$i];
    38             $arr[$i] = $minVal;
    39             $arr[$minIndex] = $temp;
    40         }
    41     }
    42 }
    43 
    44 // 插入排序法(小-->大)
    45 function InsertSort(&$arr){
    46     for ($i=1;$i<count($arr);$i++){
    47         // 带插入的值
    48         $insertVal = $arr[$i];
    49         // 要比较的位置下标
    50         $insertIndex = $i -1;
    51         while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
    52             // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
    53             $arr[$insertIndex+1] = $arr[$insertIndex];
    54             $insertIndex--;
    55         }
    56         // 插入insertVal
    57         if($insertIndex+1 != $i){
    58             $arr[$insertIndex+1] = $insertVal;
    59         }
    60     }
    61 }
    62 
    63 
    64 $arr = array(10,2,0,-23,90,-100,400);
    65 //maopao_sort($arr);
    66 //SelectSort($arr);
    67 InsertSort($arr);
    68 echo var_dump($arr)."<br>";
    69 print_r($arr);

     快速排序法:

     1 <?php
     2 function quickSort(&$arr){
     3     if(count($arr)>1){
     4         $k=$arr[0];
     5         $x=array();
     6         $y=array();
     7         $_size=count($arr);
     8         for($i=1;$i<$_size;$i++){
     9             if($arr[$i]<=$k){
    10                 $x[]=$arr[$i];
    11             }elseif($arr[$i]>$k){
    12                 $y[]=$arr[$i];
    13             }
    14         }
    15         $x=quickSort($x);
    16         $y=quickSort($y);
    17         return array_merge($x,array($k),$y);
    18     }else{
    19         return$arr;
    20     }
    21 }
    22 ?>
  • 相关阅读:
    [ css 计数器 counter ] css中counter计数器实例演示三
    [ css 计数器 counter ] css中counter计数器实例演示二
    Leetcode 15. 三数之和
    Leetcode 13. 罗马数字转整数
    Leetcode 19. 删除链表的倒数第 N 个结点
    Leetcode 12. 整数转罗马数字
    Leetcode 11. 盛最多水的容器 双指针
    剑指 Offer 68
    剑指 Offer 68
    面试题 04.02. 最小高度树
  • 原文地址:https://www.cnblogs.com/xiaoshitoutest/p/5965332.html
Copyright © 2020-2023  润新知