3

选择排序

选择排序主要是将假设数组中的第一个是最小的,循环与数组中的第一个进行比较 如果比其还小 则记录下标 进行数值交换 效率相对冒泡来说比较高

 function selection_sort($array){
    $count=count($array);
    for($i=0;$i<$count-1;$i++){
        /*findtheminest*/
        $min=$i;
        echo'$min-->'.$array[$min].'-->';
        for($j=$i+1;$j<$count;$j++){
            //由小到大排列
            if($array[$min]>$array[$j]){
                //表明当前最小的还比当前的元素大
                $min=$j;
                //赋值新的最小的
            }
        }
        echo$array[$min].'coco<br/>';
        /*swap$array[$i]and$array[$min]即将当前内循环的最小元素放在$i位置上*/
        if($min!=$i){
            $temp=$array[$min];
            $array[$min]=$array[$i];
            $array[$i]=$temp;
        }
    }
    return$array;
}

冒泡排序:

冒泡排序是将数组中的前后两个相领的数值进行比较 条件成立 则进行交换 效率比较低 因为其交换的次数也比较多

function bubbleSort($numbers) {
$cnt = count($numbers);
for ($i = 0; $i < $cnt; $i++) {
    for ($j = 0; $j < $cnt - $i - 1; $j++) {
        if ($numbers[$j] > $numbers[$j + 1]) {
            $temp = $numbers[$j];
            $numbers[$j] = $numbers[$j + 1];
            $numbers[$j + 1] = $temp;
        }
    }
}

return $numbers;

}

插入排序:

插入排序是将插入的数据保存在变量中,与数组中的每个数比较 找到合适的位置 进行插入 效率相对来说比较高

function insertSort($arr)
{    
     for($i=0;$i<count($arr);$i++){
         //当前要插入的值与下标
         $insertVal=$arr[$i];
         $insertIndex=$i-1;
         //判断当前的值是否大于0并且大于它要插入的数
         while($insertIndex>=0&&$insertVal<$arr[$insertIndex])
         {
             $arr[$insertIndex+1]=$arr[$insertIndex];
             $insertIndex--;
         }
         $arr[$insertIndex+1]=$insertVal;
     }
}

快速插入:

快速排序由C. A. R.
Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。效率很高

function quick_sort($arr)
    {
        //判断参数是否是一个数组
        if(!is_array($arr)) 
           return false;
        //递归出口:数组长度为1,直接返回数组
        $length=count($arr);
        if($length<=1) return $arr;
        //数组元素有多个,则定义两个空数组
        $left=$right=array();
        //使用for循环进行遍历,把第一个元素当做比较的对象
        for($i=1;$i<$length;$i++)
        {
            //判断当前元素的大小
            if($arr[$i]<$arr[0]){
                $left[]=$arr[$i];
            }else{
                $right[]=$arr[$i];
            }
        }
        //递归调用
        $left=quick_sort($left);
        $right=quick_sort($right);
        //将所有的结果合并
        return array_merge($left,array($arr[0]),$right);
        }

萧逸
709 声望29 粉丝

致力于分享效率工具、有趣好玩的开源项目、技术干货。关注我,带你发现新大陆~