php 排序算法整理

来源:互联网 发布:电脑淘宝没有登陆页面 编辑:程序博客网 时间:2024/06/07 03:14

一、快速排序
先用一个基准元素,将数组分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分

function quickSort($arr) {    //先判断是否需要继续进行    $length = count($arr);    if($length <= 1) {        return $arr;    }    //选择第一个元素作为基准    $base_num = $arr[0];    //遍历除了标尺外的所有元素,按照大小关系放入两个数组内    //初始化两个数组    $left_array = array();  //小于基准的    $right_array = array();  //大于基准的    for($i=1; $i<$length; $i++) {        if($base_num > $arr[$i]) {            //放入左边数组            $left_array[] = $arr[$i];        } else {            //放入右边            $right_array[] = $arr[$i];        }    }    //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数    $left_array = quickSort($left_array);    $right_array = quickSort($right_array);    //合并    return array_merge($left_array, array($base_num), $right_array);}

二、插入排序
假设前面的数已经是排好顺序的,把后面的数依次插到前面的有序数中。

function insertSort($arr) {    $len=count($arr);    for($i=1; $i<$len; $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;}

三、选择排序
依次从后面选出最小(最大)的一个数与前面的数交换位置。

function selectSort($arr) {//双重循环完成,外层控制轮数,内层控制比较次数 $len=count($arr);    for($i=0; $i<$len-1; $i++) {        //先假设最小的值的位置        $p = $i;        for($j=$i+1; $j<$len; $j++) {            //$arr[$p] 是当前已知的最小值            if($arr[$p] > $arr[$j]) {            //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。                $p = $j;            }        }        //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。        if($p != $i) {            $tmp = $arr[$p];            $arr[$p] = $arr[$i];            $arr[$i] = $tmp;        }    }    //返回最终结果    return $arr;}

四、冒泡排序
从前往后对相邻的两个数依次进行比较,每当它们的排序与排序要求相反时,就将它们互换。

function bubbleSort($arr){   $len=count($arr);  //该层循环控制 需要冒泡的轮数  for($i=1;$i<$len;$i++)  { //该层循环用来控制每轮 冒出一个数 需要比较的次数    for($k=0;$k<$len-$i;$k++)    {       if($arr[$k]>$arr[$k+1])        {            $tmp=$arr[$k+1];            $arr[$k+1]=$arr[$k];            $arr[$k]=$tmp;        }    }  }  return $arr;}

转自:http://www.cnblogs.com/luyucheng/p/6378882.html

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不锈钢狗笼价格 狗笼专卖 淘宝狗笼 不锈钢狗笼 淘宝 狗笼 闲置狗笼 求购狗笼 狗笼多少钱 不锈钢狗笼多少钱 狗笼批发 狗笼图片 大型狗笼 猫笼 鸭笼 狗笼批发价格 哪里有卖狗笼 小型狗笼 不绣钢狗笼 卖狗笼 大型狗笼制作 怎样自制狗笼 狗笼地板 狗笼大全 猫笼狗笼 狗笼报价 不锈狗笼 隔音狗笼 狗笼的制作 狗笼 设计 求狗笼 狗笼安装步骤 金奥狗笼 笼物狗笼 宠物狗笼 养狗笼 小狗笼子 狗狗笼子 狗类大全图片 狗类 狗粉 狗粮