php 数组(2)

数组排序算法

  冒泡排序,是一种计算机科学领域的较简单的排序算法。它重复地访问要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们减缓过来。走访数列的工作室重复的进行直到没有再需要交换,也就是说该数列已经排序完成

  思路:

    比较相邻的元素,如果第一个比第二个大,就交换他们两个

    对每一个相邻元素做同样的的工作,从开始第一对到结尾的最后一对,在这一点,最后的元素应该会是最大的数

    针对所有的元素重复以上的步骤,除了最后一个

    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

$arr = array(1,5,3,6,2,,9,8,7,4);
for($i = 0,$len = count($arr);$i < $len;$i++){
    for($j = 0;$j < $len - 1 - $i;$j++){
        if($arr[$j] > $arr[$j + 1]){
            $temp = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $temp;
        }
    }
}

-----

选择排序,是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完,选择排序是不稳定的排序方法(如:序列[5,5,3]第一次就将第一个[5]与[3]交换,导致第一个5移动到第二个5后面)

思路:

  假设第一个元素为最小元素,记下下标

  寻找右侧剩余的元素,如果有更小的重新记下最新的下标

  如果有新的最小的,交换两个元素

  往右重复以上的步骤,知道元素本身是最后一个

$arr = array(1,5,3,6,2,,9,8,7,4);
// 确定要交换多少次,一次只能找到一个最小的,需要找数组长度对应的次数
for($i = 0,$len = count($arr);$i < $len;$i++){
    // 假设当前第一个已经排好序
    $min = $i; // 当前第一个数时最小的
    // 比较当前元素与选定的最小的元素
    for ($j = $i + 1;$j < $len;$j++){
        if($arr[$j] < $arr[$min]){
        // 说明当前指定的 $min 不合适
            $min = $j;
        }
    }
    // 交换当前选定的值与实际最小的元素值
    if($min != $i){
        $temp = $arr[$i];
        $arr[$i] = $arr[$min];
        $arr[$min] = $temp;
    }
}
echo '<pre>';
print_r($arr);

-----

猜你喜欢

转载自www.cnblogs.com/mysterious-killer/p/9996889.html