天天看點

算法總結(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)冒泡排序

繼續閱讀