冒泡排序算法如下:
1、比较相邻的元素,如果第一个比第二个大,则交换两个。
2、对每一个相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素是最大数
3、针对所有的元素重复以上步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较。
此以数组为例。
/**
*冒泡排序
*/
public class ArrayBub {
private long[] a;
private int nElems;
public ArrayBub(int max) {
a = new long[max];
nElems = 0;
}
//插入数据
public void insert(long value){
a[nElems] = value;
nElems++;
}
//查询数据
public void display(){
int i ;
for( i=0;i<nElems;i++){
System.out.printf(a[i]+"\t");
}
System.out.printf("\n");
}
//冒泡排序
public void bubbleSort(){
int out,in;
for(out=nElems-1;out>0;out--){
for (in=0;in<out;in++){
if(a[in] > a[in+1]){
swap(in,in+1);
}
}
}
System.out.printf("比较次数:"+nElems*(nElems-1)/2+"\n");
}
//交换元素位置
private void swap(int one,int two){
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
public static void main(String[] args){
int maxSize = 100;
ArrayBub arr = new ArrayBub(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(0);
arr.insert(66);
arr.insert(33);
arr.display();//未排序
System.out.printf("-----------我是分隔符-----------\n");
arr.bubbleSort();
arr.display();
}
}
结果如下:
77 99 44 55 22 88 11 0 66 33
-----------我是分隔符-----------
比较次数:45
0 11 22 33 44 55 66 77 88 99