欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

JAVA 冒泡排序算法(包括详细的过程代码解释和优化)"推荐收藏"。

最编程 2024-04-19 09:09:52
...

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说JAVA冒泡排序算法(含详细过程代码讲解及优化)「建议收藏」,希望能够帮助大家进步!!!

冒泡排序算法拆分讲解及优化

  • java冒泡排序
  • 一、代码的拆分讲解
    • 从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可。
  • 二、冒泡排序的代码
    • 优化的目的:数组有可能在中间某一过程就已经有序,无序再进行后面操作。

java冒泡排序

3,9,-1,10,-2这组数为例,对这组数使用冒牌排序使其有序

一、代码的拆分讲解

首先创建一个数组和一个用于三角交换的变量

int arr[] = { 
   3,9,-1,10,-2};
int temp = 0;

首先进行第一趟

此代码由Java架构师必看网-架构君整理
 //第一趟排序,就是将最大的数排在最后
        for (int j = 0; j < arr.length - 1; j++) { 
   
            if (arr[j] > arr[j+1]){ 
   
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

第一趟的运行后的数组

在这里插入图片描述
在这里插入图片描述

然后第二趟

 //第一趟排序,就是将最大的数排在最后
        for (int j = 0; j < arr.length - 1-1; j++) { 
   
            if (arr[j] > arr[j+1]){ 
   
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

第二趟的运行后的数组

在这里插入图片描述
在这里插入图片描述

第三趟

此代码由Java架构师必看网-架构君整理
 //第一趟排序,就是将最大的数排在最后
        for (int j = 0; j < arr.length - 1 -2; j++) { 
   
            if (arr[j] > arr[j+1]){ 
   
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

第三趟的运行后的数组

在这里插入图片描述
在这里插入图片描述

第四趟

 //第一趟排序,就是将最大的数排在最后
        for (int j = 0; j < arr.length - 1 -3; j++) { 
   
            if (arr[j] > arr[j+1]){ 
   
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

第四趟的运行后的数组

在这里插入图片描述
在这里插入图片描述

下面是四趟代码的结果汇总:

在这里插入图片描述
在这里插入图片描述

从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可。

二、冒泡排序的代码

下面为冒泡排序的代码,并把它写入bubblesSort方法里:

普通冒泡排序:

    public static void bubbleSort(int[] arr){ 
   
        //冒泡排序的时间复杂度为O(n*n)
        int temp = 0;//临时变量
        for (int j = 0; j < arr.length - 1; j++) { 
   

            for (int i = 0; i < arr.length-1 -j ; i++) { 
   
                if (arr[i] > arr[i+1]){ 
   
                    //三角交换
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }

优化的目的:数组有可能在中间某一过程就已经有序,无序再进行后面操作。

优化冒泡排序:

public static void bubbleSort(int[] arr){ 
   
        //冒泡排序的时间复杂度为O(n*n)
        int temp = 0;//临时变量
        boolean flag = false;//用于优化冒泡排序,判断是否进行过交换
        for (int j = 0; j < arr.length - 1; j++) { 
   

            for (int i = 0; i < arr.length-1 -j ; i++) { 
   
                if (arr[i] > arr[i+1]){ 
   
                     //三角交换
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    flag = true;
                }
            }
            //如果没有进入三角交换则证明数组已经有序,直接退出循环即可
            //如果进入了三角交换,把flag赋值为false,来判断下一次循环是否进入三角交换
            if (flag == false){ 
   
                break;
            }else { 
   
                flag = false;
            }
        }
    }