Carson带你学数据结构:图文详解冒泡排序 & 优化

Posted Carson带你学Android

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Carson带你学数据结构:图文详解冒泡排序 & 优化相关的知识,希望对你有一定的参考价值。

前言

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


目录


1. 简介

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


2. 算法思想

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

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


3. 算法示意图

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

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

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

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

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


4. 算法实现

4.1 具体代码

具体请看注释

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 最终测试结果

1
2
3
4
5
6
7
8
9

5. 算法优化

  • 简介

  • 具体实现
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的安卓开发笔记

以上是关于Carson带你学数据结构:图文详解冒泡排序 & 优化的主要内容,如果未能解决你的问题,请参考以下文章

Carson带你学数据结构:手把手带你全面优化快速排序算法

Carson带你学Android:全面剖析Binder跨进程通信原理

Carson带你学数据结构:归并排序,稳定性最高的排序算法

Carson带你学数据结构:归并排序,稳定性最高的排序算法

Carson带你学数据结构:归并排序,稳定性最高的排序算法

Carson带你学数据结构:希尔排序,复杂度最高的排序算法