一、基本思路:
冒泡排序是一种简单的交换类排序。其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾,此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。
一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,……第i趟需要比较n-i次。
二、算法实现
<span style="font-family:Microsoft YaHei;font-size:14px;">public class Bubble extends Example {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer [] a=new Integer[]{15,50,20,45,21,13};
Bubble b=new Bubble();
b.sort(a);
b.show(a);
}
@Override
public void sort(Comparable[] a) {
// TODO Auto-generated method stub
for (int i = 0; i < a.length-1; i++) {//趟数
for (int j = 0; j < a.length-i-1; j++) {//比较次数
if (!less(a[j],a[j+1])) {
exch(a, j, j+1);
}
}
}
}
}</span>
模板代码
<span style="font-family:Microsoft YaHei;font-size:18px;">public abstract class Example {
public abstract void sort(Comparable[] a);
protected static boolean less(Comparable v,Comparable w){
return v.compareTo(w)<0;
}
protected static void exch(Comparable [] a ,int i,int j){
Comparable tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
protected static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]+" ");
}
}
public static boolean isSorted(Comparable[] a){
for (int i = 1; i < a.length; i++) {
if(less(a[i],a[i-1])) return false;
}
return true;
}
}</span>