天天看点

算法总结(1)冒泡排序

     冒泡排序应该是排序算法中最简单易懂的一种排序算法了。

   一.思路

     将数据设想成竖立的,小的往上浮,大的往下沉。

     正确的应该是小的在顶上,大的在底下。

     从最底下的元素开始扫描,若发现两个相邻元素顺序错误,则交换。首先,比较a[n-1]和a[n-2],接着,a[n-2]和a[n-3],则在第一次循环完毕后,当前最小的元素被浮到了最顶上;同理,第二次又从最下面开始比较,不过,最后的比较是a[2]和a[1],因为之前最小的元素已经被浮到了a[0]处。

     注意:最后一次比较,只比较a[n-1]和a[n-2],若顺序错误,则交换,结束。

   二.伪代码

     bubblesort(a[])

            for i=0 to a.length-2                                                          //第i次循环,从o开始,已经有i个元素排好,第0次循环0个已排好

                  for j=a.length-1  downto i+1                                      //当前直到第i-1个元素都已经排好(已经有i个元素排好了),最多比较到i+1上的元素为止,即比较a[i+1]和a[i],比较每次                                                                                                          //都从最底下开始,即从a[n-1]和a[n-2]的比较开始, 如果顺序错误,就交换j和j-1位置的值

    三.java实现

/**
 * @author garypotter
 * @version 创建时间:2016年4月2日 下午12:48:50
 * @TODO
 * 类说明:冒泡算法
 */
public class BubbleSort {
	
	
	public static void main(String[] args) {
		Object[] a={5,2,3,8,1};
		bubblesort(a);
		System.out.println("result:"+a[0]+a[1]+a[2]+a[3]+a[4]);
	}
	
	
	public static void bubblesort(Object[] a){
		for(int i=0;i<a.length-1;i++){      //从0到a。length-2,一共a。length-1次循环
			for(int j=a.length-1;j>i;j--){    //从底部一直比较到最上面的没排好的那个元素
				//j>i是这么来的,最后一次比较中的较小的元素下标j-1,必须大于已经排好序的最后一个元素的下标,
				//在第i次循环中,有i-1个已经排好序的元素,已经排好序的最后一个元素下标为i-1,所以有j-1>i-1,得到j>i
				if(((Comparable)a[j]).compareTo(a[j-1])<0){
					
					swap(a,j,j-1);
				}
			}
		}
		
	}
	
	public static void swap(Object[] a,int m,int n){
		Object temp=a[m];
		a[m]=a[n];
		a[n]=temp;
	}

}
           
算法总结(1)冒泡排序

继续阅读