解析
冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。
使用冒泡排序算法对棒球队员排序
如果人近视的像计算机一样,以至于只能看到站在他面前的两个相邻的棒球队员。在这种困难的情况下,如何为队员们进行排序呢?假设有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数据结构和算法(第二版)》