前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构系列:图文详解冒泡排序 & 优化

数据结构系列:图文详解冒泡排序 & 优化

作者头像
Carson.Ho
发布2020-10-26 15:53:36
4650
发布2020-10-26 15:53:36
举报
文章被收录于专栏:Android知识分享Android知识分享

前言

本文主要讲解排序算法中最简单的冒泡排序算法,希望你们会喜欢。


目录

示意图
示意图

1. 简介

属于 内排序算法中 的 交换排序类别


2. 算法思想

  1. 自下而上对 相邻的2个数依次 比较 & 调整
  2. 若 反序 则交换,直到 无反序的记录 为止。

较大的数往下沉,较小的数类似气泡一样往上冒,故称:冒泡排序


3. 算法示意图

整个过程就跟冒泡一样,最小值一直往上“冒泡”,具体如下:

a. 2与6对比:因2<6,所以交换位置

示意图
示意图

b. 2与4对比:因2<4,所以交换位置

示意图
示意图

c. 2与7对比:因2<7,所以交换位置

示意图
示意图

以此类推,最终将序列中最小值放到了首位(冒上来了)

示意图
示意图

4. 算法实现

4.1 具体代码

具体请看注释

代码语言:javascript
复制
public class BubbleSort {

    /**
     * 基本的 冒泡排序
     */
    public static void bubbleSort(int[] srcArray) {
        int i,j; // 用于存放数组下标
        int temp = 0; // 用于交换数值时临时存放值

        for(i=0;i<srcArray.length-1;i++){
            // j 从后往前循环
            for(j=srcArray.length-2;j>=i;j--){
                // 若前者>后者,则交换位置
                if(srcArray[j]>srcArray[j+1]){
                    temp=srcArray[j];
                    srcArray[j]=srcArray[j+1];
                    srcArray[j+1]=temp;
                }
            }
        }

        // 输出排序后的序列
        for(int a =0;a<srcArray.length;a++)
            System.out.println(srcArray[a]);
    }

    /**
     * 执行 冒泡排序
     */
    public static void main(String[] args) {

        // 定义待排序数列
        int[] src = new int[]{9, 1, 5, 8, 3, 7, 4, 2, 6};
        // 输出结果
        bubbleSort(src);
    }
}

4.2 算法示意图

  1. 当 i =0时,算法示意图如下:
示意图
示意图
  1. 当 i =1时,算法示意图如下:
示意图
示意图
  1. i = 2、3、4依次类推…

4.3 最终测试结果

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9

5. 算法优化

  • 简介
示意图
示意图
  • 具体实现
代码语言:javascript
复制
public class BubbleSort {
    /**
     * 优化的 冒泡排序
     */
    public static void bubbleSortOpti(int[] srcArray) {

        int i,j; // 用于存放数组下标
        int temp = 0; // 用于交换数值时临时存放值

        // 标记位
        // flag = true:代表存在数据交换,即序列仍需排序,需继续循环
        // flag = false:代表不存在数据交换,即序列不需排序,已经是有序序列了,可停止循环
        Boolean flag = true;
        // 若flag = false时退出循环
        for(i=0;i<srcArray.length-1 && flag;i++){

            flag = false; // 初始化为false

            // j 从后往前循环
            for(j=srcArray.length-2;j>=i;j--){
                // 若前者>后者,则交换位置
                if(srcArray[j]>srcArray[j+1]){
                    temp=srcArray[j];
                    srcArray[j]=srcArray[j+1];
                    srcArray[j+1]=temp;
                    flag = true; // 若有数据交换,则说明序列仍未无序
                }
            }
        }

        // 输出排序后的序列
        for(int a =0;a<srcArray.length;a++)
            System.out.println(srcArray[a]);
    }

    /**
     * 执行 优化后的冒泡排序
     */
    public static void main(String[] args) {
        // 定义待排序数列
        int[] src = new int[]{2, 1, 3, 4, 5, 6, 7, 8, 9};
        // 输出结果
        bubbleSortOpti(src);
    }
}

6. 性能分析

以下将分析算法的性能:时间复杂度、空间复杂度、稳定性

示意图
示意图

7. 总结

  • 本文主要讲解了 排序算法中 的冒泡排序
  • 下面我将继续讲解 数据结构,有兴趣可以继续关注Carson_Ho的安卓开发笔记
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目录
  • 1. 简介
  • 2. 算法思想
  • 3. 算法示意图
  • 4. 算法实现
    • 4.1 具体代码
      • 4.2 算法示意图
        • 4.3 最终测试结果
        • 5. 算法优化
        • 6. 性能分析
        • 7. 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档