经典算法(1)-冒泡排序

算法(1)- 冒泡排序

概述

冒泡排序是所有排序里最基础也是程序员必须要会手写的排序算法,他的实现原理其实很简单,就像水泡从水底冒出一样,一颗一颗的往上冒。它默认是从大到小排序,按顺序依次比较相邻的两个数,将小数换到前面,大数换到后面。依次比较n-1轮后获得一个由小到大的有序数组

图解

在这里插入图片描述
如上图,这是第一遍的详解,原数据是[8,6,7,9,1]。第一次:取出第一个数8和第二个数6作比较,8大于6,大数在后,小数在前,即交换8和6的位置,变成[6,8,7,9,1]。第二次:取出第二个数8和第三个数7作比较,8大于7,交换位置,变成[6,7,8,9,1]。第三次:取出第三个数8和第四个数9作比较,8小于9,那么此次不需要交换位置。第四次:取出第四个数字9和第五个数字1作比较,9大于1,交换位置,变成[6,7,8,1,9]。至此第一轮冒泡结束,筛选出最大的数字9。
在这里插入图片描述
如上图,这是全过程,第一遍找出最大数9,第二遍找出第二大数字8,第三遍找出第三大数7,第四遍找出第四大数6,最后只剩1不需要自己比较,所以最终得到的结果为[1,6,7,8,9]

代码

public void BubbleSort(int array[]){
        int count = 0;//进行的轮数
        for(int i=0;i<array.length-1;i++){//循环控制轮数
            for(int j=0;j<array.length-1-i;j++){//循环控制每轮进行比较的次数
                count++;//每一轮都加一
                if(array[j]>array[j+1]){//判断是否大数在前小数在后,并且交换大小数的位置
                    int temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

时间复杂度

第一轮需要比较(n-1)次,第二轮比较(n-2)次…第(n-1)轮需要比较1次则总共需要比较 ∑ i = 1 n − 1 ( n − i ) = 1 + 2 + 3 + . . . + n − 1 = n 2 2 − n 2 \sum_{i=1}^{n-1} (n-i) =1+2+3+...+n-1=\frac{n^2}{2}-\frac{n}{2} i=1n1(ni)=1+2+3+...+n1=2n22n次,所以冒泡排序的时间复杂度为:O( n 2 n^2 n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值