第二课 冒泡排序


1.冒泡排序类
package com.flysnow.chap03;   
  
/**  
 * 冒泡排序  
 * @author 飞雪无情  
 * @since:2010-3-25  
 */  
public class ArrayBub {   
    private long[] a;   
    private int nElems;   
    public ArrayBub(int max){   
        a=new long[max];   
        nElems=0;   
    }   
    /**  
     * 插入元素  
     * @param value  
     */  
    public void insert(long value){   
        a[nElems]=value;   
        nElems++;   
    }   
    /**  
     * 打印元素  
     */  
    public void display(){   
        for(int i=0;i<nElems;i++){   
            System.out.print(a[i]+" ");   
        }   
        System.out.println();   
    }   
    /**  
     * 冒泡排序  
     */  
    public void bubbleSort(){//性能O(N^2)   
        for(int out=nElems-1;out>0;out--){//外循环,控制趟数   
            for(int in=0;in<out;in++){//内循环,控制一趟比较次数   
                if(a[in]>a[in+1]){//交换位置   
                    swap(in,in+1);   
                }   
            }   
        }   
    }   
    /**  
     * 交换  
     * @param one 数组索引  
     * @param two 数组索引  
     */  
    private void swap(int one, int two) {   
        long temp=a[one];   
        a[one]=a[two];   
        a[two]=temp;   
    }   
}  


2.冒泡排序测试 
package com.flysnow.chap03;   
  
import java.util.Random;   
  
/**  
 * 冒泡排序测试  
 * @author 飞雪无情  
 * @since:2010-3-25  
 */  
public class BubbleSortApp {   
    public static void main(String[] args){   
        ArrayBub bub=new ArrayBub(100);   
        Random random=new Random();   
        for(int i=0;i<10;i++){//添加10个随机数   
            bub.insert((long)(random.nextFloat()*100));   
        }   
        bub.display();//未排序   
        bub.bubbleSort();//排序   
        bub.display();//排序后   
    }   
}

3.总结
算法思想:

第一趟,从队列的最左边开始,比较0号和1号的数据,如果0号的数据大于1号的,则交换位置,否则什么都不做。然后右移一个位置,比较1号和2号的数据,和刚才一样,一次类推走完第一趟。
第二趟,也是从最左边开始,比较0号和1号数据。。。一直到n-1号数据
........
直到比较到0号数据.

你可能感兴趣的:(算法)