排序算法总结(3)--冒泡排序

一、简介

冒泡排序也是一种简单直观的排序算法。从最后一个元素开始,每次比较两个相邻元素,如果他们的顺序错误就把他们交换过来。对每一对相邻元素作同样的工作,从后到前。一次循环完毕后,最前的元素是最小的数。即经过交换,最小的数“浮”到了数列的最前端。持续每次对未确定最终位置的元素重复上面的步骤,直到没有任何一对数字需要比较。 对于大小为n的数组,需要循环n-1次。为了提高效率,需要设置一个标签,如果在循环中发生了交换,标签为1,如果没有发生交换,标签为0,说明说有的元素排列完成,算法停止。

二、伪代码

冒泡排序
bubbleSort(A)
flag=true;
for i=0 to A.length-2 && flag==true
    flag=false;
    for j=A.length-1 downto i+1
        if A[j]<A[j-1]
            swap(A[j],A[j-1])
            flag=true;

三、代码实现

public class Method {
    public static void main(String[] args) {
        int[] array={41,31,59,26,41,58,1,3,78,6,15,0};
        bubbleSort(array);
        for(int x:array){
            System.out.println(x);
        }
    }

    public static void bubbleSort(int[] array){
        boolean flag=true;

        for(int i=0;i<array.length-1 && flag==true;i++){
            flag=false;
            for(int j=array.length-1;j>i;j--){
                if(array[j]<array[j-1]){
                    int temp=array[j];
                    array[j]=array[j-1];
                    array[j-1]=temp;
                    flag=true;
                }
            }
        }
    }
}

四、复杂度分析

时间复杂度:
最好情况:O(n)
最坏情况:O(n^2)
平均情况:O(n^2)
空间复杂度:O(1),原址排序

五、注意事项

1、冒泡是稳定的算法。而其时间效率是不确定的,在最好的情况下仅执行1趟冒泡做n-1次比较,无交换,而在最坏的情况下执行n-1趟冒泡,第i趟做了n-i次比较,并执行n-i次对象交换。
2、冒泡排序在每趟冒泡之后,至少有一个元素确定最终位置。
3、选择排序、插入排序和冒泡排序都是时间复杂度为 O(n2) 的排序算法,而且分别是堆排序、希尔排序和快速排序的基本算法,算法思想中都包含了n-1次循环和比较、交换等,下面是具体的区别。

排序算法选择排序插入排序冒泡排序
每趟循环比较多次交换一次比较多次,移动多次比较多次,交换多次
比较次数是否和序列有关无关有关有关
每次循环后是都能确定一个元素的位置不能
改进算法堆排序希尔排序快速排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值