轻松搞定Java冒泡排序速算法以及算法优化

冒泡排序的基本思路:通过对待排序系列从前向后,依次比较相邻元素的值,若发现逆序就交换,意思就是使较大的元素从前向后移,好比水低下的气泡一样逐渐向上冒泡,一个道理的。

冒泡排序优缺点:

优点:比较简单、空间复杂度较低、是稳定的一种排序。缺点:时间复杂度太高、效率比较慢、一轮比较都需要换位置,所以效率不高,假如现在一个数组里面有N个数,那么排序完成需要比较N*(N-1)/2次。

冒泡排序规则

每一趟排序的次数在逐渐减少的总的进行数组的大小减1次大的循环每一趟比较完都会有最大值出现。

实现代码如下

package com.ypj;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * @description 测试类2
 * @author: DimitriCode
 * @date: 2020/4/7 0007 18:18 星期二
 */
public class Demo02 {
    public static void main(String[] args) {
        int[] arr = {9,6,3,15,-1};
        demo02(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void demo02(int[] arr){
        int len = arr.length;
        boolean flag = false;//标识变量,表示是否进行交换
        for (int j=0;j<len-1;j++){//确定排序循环次数
            int lent = arr.length;
            for (int i=0;i<lent-1-j;i++){//确定比较次数
                if (arr[i]>arr[i+1]){//如果前面的数比后面大,则交换
                    flag = true;
                    //交换
                    int tmp = arr[i];//先把arr[i]存在tmp中
                    arr[i] = arr[i+1];
                    arr[i+1] = tmp;
                }
            }
            if (!flag){//在一趟排序中,一次交换没有发生过
                break;
            }else {
                flag = false;//重置flag,进行下一次判断
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/realize_dream/article/details/105384363