冒泡排序通俗易懂 图文详细操作

简介: 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知。我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2)。
  • 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!

在这里插入图片描述

  • 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知。

  • 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2)。

  • 思考:如何优化?

//冒泡排序
//1.比较组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//每一次比较,都会产生出一个最大,或者最小的数字:
//下一轮则可以少一次排序!
//依次新环,直到结束!
public class Demo {
    public static void main(String[] args) {
        int[] a = {1,8,6,9,8,5,11,33,4,66};

        int[] sort = sort(a);//调用完我们自己写的排序方法以后,返回一个排序后的数组

        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] array){
        //临时变量
        int temp = 0;

        //外城循环判断我们这个要走多少次
        for (int i = 0; i < array.length-1; i++) {

            boolean flag = false;//通过flag标识位减少没有意义的比较

            //内层循环,比价判断两个数,如果第一个数,比第二个数大,则交换位置
            for (int j = 0; j < array.length-1-i; j++) {
                //从大到小 > 则改变符号即可
                //从小到大 < 则改变符号即可
                if(array[j+1] > array[j]){
                    temp = array[j];
                    array[j] =  array[j+1];
                    array[j+1] = temp;
                    flag = true;
                }
            }
            //优化
            if(flag == false){
                break;
            }
        }
        return array;
    }
}

### 图文流程
1673475648713.png

相关文章
|
8月前
|
存储 算法 搜索推荐
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)(上)
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)
79 6
|
8月前
|
算法 编译器
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)(中)
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)
66 4
|
8月前
|
存储 算法 搜索推荐
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)(下)
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)
63 1
|
8月前
|
存储 搜索推荐 算法
【排序】软考笔记:简要回顾下常见的几种排序算法
【排序】软考笔记:简要回顾下常见的几种排序算法
134 0
【排序】软考笔记:简要回顾下常见的几种排序算法
|
8月前
|
存储 算法
图解Kmp算法——配图详解(超级详细)
图解Kmp算法——配图详解(超级详细)
|
容器
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
186 0
|
机器学习/深度学习 存储 算法
算法创作 | 冒泡排序问题解决方法
算法创作 | 冒泡排序问题解决方法
78 0
数据结构一个小白的练级之路【链表的分割】题目参考
数据结构一个小白的练级之路【链表的分割】题目参考
|
存储 移动开发 算法
10大常用的排序算法(算法分析+ 动图演示)
算法概述 算法分类 十种常见排序算法可以分为两大类: • 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
1689 1
10大常用的排序算法(算法分析+ 动图演示)
|
算法
【漫画算法学习笔记】第二章——2.1数组
本篇博客总结了《漫画算法》第二章的知识点,并将数组的扩容封装成了工具类
105 0
【漫画算法学习笔记】第二章——2.1数组