冒泡算法

2020-01-04  本文已影响0人  任性一把

@TOC

排序算法

常见的排序算法可以分为两类:

参考链接: O(1), O(n), O(logn), O(nlogn) 的区别

1.冒泡排序

冒泡算法是一种简单的排序算法,通过不断的相临两个元素的比较,每轮可以比较出最大的元素,较小的元素慢慢移到前面。

1.1 算法描述

1.2 动图演示

Alt

1.3 代码实现

    $arr = [2,22,3,88,5,333,88,90];
    $count = count($arr);
    for($i=0;$i<$count-1;$i++) { // 外层控制进行几轮比较
        for($j=0;$j<$count-$i-1;$i++){ // 内层控制冒出来的元素要经过几轮比较
            if($arr[$j]>$arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }

2. 插入排序

插入排序是比较典型的高低个排队,每次拿一个元素和前面的元素比较,插到合适的位置。

2.1 算法描述

2.2 动图演示

Alt

2.3 代码实现

    $arr = [2,22,3,88,5,333,88,90];
    $count = count($arr);
    for($i=1;$i<$count;$i++){
        $current = $arr[$i];
        $preIndex = $i-1;
        while($preIndex>=0 && $arrp[$preIndex]>$current) {
            $arr[$preIndex+1] = $arr[$preIndex];
            $preIndex--;
        }
        $arr[$preIndex+1] = $current;
    }

3. 选择排序

选择排序就是寻找最小或者最大的数,假设第一个位置放最小的元素,通过比较找到最小元素,和当前位置元素换位,依次执行下去。

3.1 算法描述

3.2 动图演示

Alt

3.3 代码实现

    $arr = [2,22,3,88,5,333,88,90];
    $count = count($arr);
    for($i=0;$i<$count-1;$i++) {
        $minIndex = $i;
        for($j=$i+1;$j<$count;$j++) {
            if($arr[$i]<$arr[$minIndex]){
                $minIndex = $i;
            }
        }
        if($minIndex !== $i) {
            $temp = $arr[$i];
            $arr[$i] = $arr[$minIndex];
            $arr[$minIndex] = $temp
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读