程序员八大排序算法之冒泡排序算法(java版)

1.什么是排序算法:

排序(sort)是指将数据元素按照指定关键字的大小递增/递减次序重新排列。排序是线性表,二叉树等数据结构的一种基本操作,通过排序可以提高查找的效率。

排序算法的分类:

一:分为内部排序与外部排序:

内部排序:指将需要处理的所有数据都加载到内存储存器中进行排序。

外部排序:数据量大,无法全部加载到内存中,需要借助外部储存进行排序。

2.开发者必备的排序算法有:

一:冒泡排序   二:选择排序  三:直接插入排序  四:归并排序  五:快速排序

六:堆排序  七:希尔排序  八:基数排序            (这里首先实现冒泡排序算法)

3.什么是冒泡排序算法:冒泡排序算法属于内部排序算法的交换排序。

原理:比较相邻两个元素的大小,如果反序,则交换。若按升序排序,每趟将数据序列的最大数换到最后位置,像气泡一样冒出。(降序同理)

举例演示:

 

下面实现冒泡排序算法:

 public static void BubbleSort(int[] arr) {
        int temp;//定义一个临时变量,用于交换元素间的位置。
        boolean flag = false;//布尔标记
         //i表示第几轮“冒泡”,j 表示“走访”到的元素索引。
        // 每一轮“冒泡”中,j 需要从列表开头“走访”到 array.length - 1 的位置。
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = true;
                }
            }
            //如果不为真,则说明没有进行交换,直接终止。
            if (!flag) {
                break;
            } else {
                flag = false;//继续进行交换。
            }
        }
        System.out.println(Arrays.toString(arr));
    }

 3.冒泡排序算法分析:

最好情况:数据序列排序,只需一趟扫描,比较n次,没有数据移动。

时间复杂度为:O(n)

最坏情况:数据序列随机排列和反序排列,需要n-1趟扫描,比较次数与移动次数都是O(n^2)。

时间复杂度为:O(n^2)

总之,数据序列越接近有序,冒泡排序算法时间效率越高,为O(n)~O(n^2)。

冒泡排序算法需要一个辅助空间用于交换两个元素,空间复杂度为O(1)。

-------------------------------------------------------------------------------------------------------

冒泡排序算法稳定但是效率不高。

4.冒泡排序算法的使用情景:数据量不大,并且对稳定性有要求,基本有序的情况。

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值