JAVA数据结构和算法-简单排序之冒泡排序

解析

冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。

使用冒泡排序算法对棒球队员排序

如果人近视的像计算机一样,以至于只能看到站在他面前的两个相邻的棒球队员。在这种困难的情况下,如何为队员们进行排序呢?假设有N个队员,并且根据所占的位置从左到右分别给每个队员编号,从0到N-1。

冒泡排序程序执行如下:从队列的最左边开始,比较0号位置和1号位置的队员。如果左边的队员(0号)高,就让两个队员交换。如果右边的队员高,就什么也不做。然后右移一个位置,比较1号位置和2号位置的队员。和刚才一样,如果左边的队员高,则两个队员交换位置,这个排序如下图所示:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码

/**
 * Created by Bruce on 2020/8/6
 * 冒泡排序
 **/
public class BubbleSort_06 {

    private long[] a;
    private int nElems;

    public BubbleSort_06(int maxSize) {
        this.a = new long[maxSize];
        this.nElems = 0;
    }

    public void insert(long insertValue){
        if(nElems == a.length){
            return;
        }
        a[nElems] = insertValue;
        nElems++;
    }

    public void display(){
        for(int i = 0 ; i < nElems; i++){
            System.out.print(a[i] + " ");
        }
        System.out.println(" ");
    }

    public void bubbleSort(){
        for(int out = nElems - 1; out > 1; out--){
            for(int in = 0; in < out; in++){
                if(a[in] > a[in + 1]){
                    swap(in,in + 1);
                }
            }
        }
    }

    private void swap(int one, int two){
        long temp = a[one];
        a[one] = a[two];
        a[two] = temp;
    }

    public static void main(String[] args) {
        BubbleSort_06 arr = new BubbleSort_06(100);
        arr.insert(77);
        arr.insert(99);
        arr.insert(44);
        arr.insert(55);
        arr.insert(22);
        arr.insert(88);
        arr.insert(11);
        arr.insert(00);
        arr.insert(66);
        arr.insert(33);

        arr.display();

        arr.bubbleSort();
        arr.display();
    }

}

运行结果:

77 99 44 55 22 88 11 0 66 33

0 11 22 33 44 55 66 77 88 99

释义

在这里插入图片描述

不变性

在许多算法中,有些条件在算法执行时是不变的。这些条件为称为不变形。认识不变性对理解算法是有用的。在一定的情况下它们对调试也有用;可以反复地检查不变性是否为真,如果不是的话就标记出错。
在这里插入图片描述

冒泡排序的效率

在这里插入图片描述在这里插入图片描述
本文摘要自《Java数据结构和算法(第二版)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值