IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 冒泡排序优化(循环次数、判断次数) -> 正文阅读

[数据结构与算法]冒泡排序优化(循环次数、判断次数)

冒泡排序

冒泡排序(Bubble Sort),是一种较简单的排序算法

冒泡排序算法原理如下:

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

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

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

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

冒泡排序算法优化思路:

循环次数优化:当冒泡排序进行外层循环时,内层循环中交换值语句不会再执行(内层循环if语句永远为false),此时我们认为排序已经完成,可以退出内外层循环。

判断次数优化:冒泡排序在进行内层循环时,循环次数永远递减的。则下一次内层循环的次数小于上一次循环的次数。

代码举例:

private static void bubbleSort(int[] arr) {
        int last = arr.length-1;    //定义一个last值,last指向内层循环的次数,
                                    //初始化为arr的长度-1
        for (int i = 0; i < arr.length; i++) {   //冒泡排序的外层循环
            boolean bl = true;      //定义一个boolean类型,每次进入内存循环        前,将bl的值赋值为true,用于优化循环次数
            int end = last;         //每次外层循环进入前,用内层循环进行赋值的last控制内层循环运行的次数
            for (int j = 0; j < end; j++) {
                 if(arr[j]>arr[j+1]){            //判断是否需要交换值
                     int temp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = temp;

                     bl = false;    //当进行交换值后,说明下一次外层可能需要继续判断是否需要交换值,即赋值为false,代表继续进行下一次外层循环。
 
                     last = j;      //将最后需要更换值的下标j记录下来给last,代表此时arr[j]后的所有值顺序已经排好,不需要重复进行排序判断
                 }
            }
            if(bl) break;           //当bl未被赋值为false,即bl值为true,此时代表在前一轮循环中已经将数组排序完成,此时即可跳出内外层循环,冒泡排序结束!
        }
}

输出结果:35 8 78 38 35 28 48 3 15 61?
??????????????????3 8 15 28 35 35 38 48 61 78?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:27:44  更:2021-08-25 12:28:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:29:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码