美文网首页
冒泡算法

冒泡算法

作者: 任性一把 | 来源:发表于2020-01-04 23:10 被阅读0次

@TOC

排序算法

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

  • 比较类算法:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破 O(nlogn) ,因此也称为非线性时间比较类排比。
  • 非比较类算法:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

参考链接: 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
        }
    }

相关文章

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 冒泡算法

    一、常用冒泡算法 二、优化冒泡算法

  • 基本算法——快速排序算法

    快速排序算法是对冒泡算法的改进。所以我们首先来简单的谈谈冒泡算法。 1.冒泡算法 冒泡排序(Bubble S...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 算法:冒泡排序

    本文内容:1、什么是冒泡排序?2、冒泡排序的 C/OC 实现与算法分析。 算法总目录:算法? 1、什么是冒泡排序?...

  • 7.4-全栈Java笔记:三种经典算法

    冒泡排序算法 冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是基本的素养。 算法重复地...

  • 算法系列教程(PHP演示)

    算法系列教程-四大排序算法(PHP演示) 冒泡 冒泡排序原理...

网友评论

      本文标题:冒泡算法

      本文链接:https://www.haomeiwen.com/subject/iwzfactx.html