• 技术文章 >php教程 >php手册

    PHP中数组的三种排序方法分享

    2016-06-13 12:00:08原创562
    一、冒泡排序法
    说明:找到最大的数,排列到最后面,然后继续找

    例:

    复制代码 代码如下:


    $arr = array(3,5,-1,0,2);
    for($i=0;$ifor($j=0;$jif($arr[$j]>$arr[$j+1]){
    $temp = $arr[$j];
    $arr[$j]=$arr[$j+1];
    $arr[$j+1]=$temp;
    }
    }
    }


    理解:
    3,5,-1,0,2
    //从第一个数开始往后比较,如果比后面的数大则与后面的数调位置
    //第一次,3小于5,那么不变
    //第二次,5大于-1,那么变成
    3,-1,5,0,2
    //第三次,5大于0
    3,-1,0,5,2
    //第四次,5大于2
    3,-1,0,2,5
    至此完成一次内循环,此时最后一个数完成排序,下次将不参与
    3,-1,0,2,5第二次外循环开始 第一次:3大于-1
    -1,3,0,2,5
    第二次:3大于0
    -1,0,3,2,5
    第三次:3大于2
    -1,0,2,3,5
    至此完成后面两位数的排序了,接下来类推
    -1,0,2,3,5
    二、选择排序法
    说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置

    复制代码 代码如下:


    $arr=array(2,1,-1,3,0);
    for($i=0;$i$minval = $arr[$i];
    $minindex = $i;
    for($j=1+$i;$jif($arr[$j]<$minval){
    $minval = $arr[$j];
    $minindex = $j;
    }
    }
    $temp = $arr[$i];
    $arr[$i] = $arr[$minindex];
    $arr[$minindex] = $temp;
    }


    理解:
    2,1,-1,3,0
    //先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数
    过程:
    1小于2,那么minval=1
    -1小于1,那么minval=-1
    3大于-1,不变
    0大于-1,不变
    那么现在就找到了该数组中最小的数了为-1
    将-1与2调换位置就完成第一个数的排序了
    那么现在数组变成
    -1,1,2,3,0
    现在第一个数-1已经为有序,所以不参与比较了,往后面继续
    现在假设minval=1
    2大于1,不变
    3大于1,不变
    0小于1,那么minval=0
    现在一次循环完成,调换0与1的位置完成第二个数的排序
    那么现在数组变成
    -1,0,2,3,1
    //后面的推法与上面相同。。。

    三、插入排序法

    说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面

    复制代码 代码如下:


    $arr=array(2,1,-1,3,0);
    for($i=1;$i$insertval=$arr[$i];
    $insertindex = $i-1;
    while($insertindex>=0 && $insertval<$arr[$insertindex]){
    $arr[$insertindex+1]=$arr[$insertindex];
    $insertindex--;
    }
    $temp = $arr[$i];
    $arr[$insertindex+1]=$insertval;
    }


    理解:
    2,1,-1,3,0
    //第一次,先保存待插入的数1为insertval,再拿 insertval 与2比较,1小于2,所以把2后移,变成如下的图
    2,2,-1,3,0
    //此时2前面没有数字了,insertindex=0,所以比较完成,那么将insertval插入到寻找到的这个位置。变成如下图
    1,2,-1,3,0
    //此时,1,2变成有序数组
    //第二次,先保存待插入的数-1为insertval,再拿insertval与2做比较,-1小于2,所以把2后移,变成如下图
    1,2,2,3,0
    //此时,再拿insertval与1做比较,-1小于1,那么把-1后移,变成如下图(这就是一个拿待插入数与前面的有序数组比较的过程)
    1,1,2,3,0
    //此时,insertindex到头了,所以将insertval插入该位置
    -1,1,2,3,0
    //后面推法如上
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php中使用接口实现工厂设计模式的代码 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 建立文件交换功能的脚本(二)• PHP教程.应用实例2 • php 简单的缓存全站函数介绍• paip.session的调试in php• CI框架源码阅读---------Input.php
    1/1

    PHP中文网