排序算法-冒泡排序

在排序算法中冒泡排序是最直观也是算易懂的; 从设计思路、代码实现Demo、算法分析。

思路:

  1. 挨个相邻的数据之间比较
  2. 前面数据大于后面数据则交换
  3. 有N个数据 需要通过N-1 次数据比较

Demo: 完整源码地址

/**
 * @Title: 排序基本算法
 * @Package ${package_name}
 * @Description: 排序基本算法
 * Created by eason_hoo on 16/8/7.
 */
public abstract class BaseSorter {
    //构造sort函数
    public  abstract  void  sort(int[] array);

}


/**
 * @Title: 冒泡排序算法
 * @Package ${package_name}
 * @Description: 冒泡排序算法 有N个数据需要N-1次中间比较排序 执行的步骤长 效率不高
 * Created by eason_hoo on 16/9/4.
 */
public class BubbleSorter extends  BaseSorter {
    @Override
    public void sort(int[] array) {

        int temp;   // 交换使用临时表

        for (int i = 0; i < array.length;i++){

            for (int j = i + 1; j < array.length;j++){

                //从小到大排序,需要移位
                if(array[i] > array[j] ){

                    temp        = array[j];
                    array[j]    = array[i];
                    array[i]    = temp;
                }

            }
        }
    }
}

算法分析:

  1. 最好情况:数据有序

    循环1次
    比较N-1次
    交换数据0次
    
  2. 最坏情况:数据逆序

    循环N-1次
    第1次循环:比较n-1次,交换n-1次,移动3(n-1)次;
    第2次循环:比较n-2次,交换n-2次,移动3(n-2)次;
    ……
    第n-2次循环:比较2次,交换2次,移动3*2次;
    第n-1次循环:比较1次,交换1次,移动3*1次;
    比较次数为:1+2+……+(n-1) = n(n-1)/2
    移动次数为:3(1+2+……+(n-1)) = 3n(n-1)/2
    
    所以时间复杂度:O(n2)
    
  3. 空间复杂度

     冒泡排序只使用一个temp 所以空间复杂度为O(1)
    
  4. 运行稳定性

     数组内数据整体不变 :排序稳定
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值