java冒泡排序及原理

昨天去面試,HR問我關於算法和數據結構的問題,結果連個冒泡排序我都給寫錯了,特意回來研究了下原理,免得以後又忘了;

首先定義一個n個數據的數組array[];

然後根據冒泡排序的基本思想:

1.相鄰的2個數相比較,按照從小到大的順序將數據排列出來;

2.n個數據,那麼就要依次排序,第一次是n-1次相鄰數比較,第二次是n-2次相鄰數比較,最多進行n-1趟排序,即可得到排序結果;

按照自己的理解,原理我也只能這樣描述了;

還是寫個代碼來說明下更好

public class PaiXu {

	public static void main(String[] args) {

		int[] arr = new int[] { 7, 4, 12, 0, 2};
		int temp = 0;
		for (int i = 0; i < arr.length-1; i++) {
			System.out.println("i"+i);
			for (int j = 0; j < arr.length-i-1; j++) {
				System.out.println("j"+j);
               if(arr[j]>arr[j+1]){
            	   temp=arr[j];
            	   arr[j]=arr[j+1];
            	   arr[j+1]=temp;
               }
			}
		}
		for(int k=0;k<arr.length;k++){
			
			System.out.print("arr:"+arr[k]+" ");
		}

	}
}

上面定義了一個數組,arr.length爲5,不管arr.length爲多少,j的長度爲0,,1,2........arr.length-2;

說下排序的順序:

第一趟排序比較了4次,數組的結果爲:4,7,0,2,12;

第2趟比較了3次,數組的結果爲:4,0,2,7,12

第3趟比較2次,數組的結果爲:0,2,4,7,12;

因爲已經沒有要交換的值了,所以排序停止,根據上面的順序,可以知道冒泡排序就是每一次比較都是把比較的n-2個數據中最大數放在n,n-1...1上。

基本的原理就這樣了,不過該算法的執行效率並不高,根據它的時間複雜度:冒泡排序的最壞時間複雜度爲O(n2)。 算法的平均時間複雜度爲O(n2) 。冒泡排序最好的時間複雜度爲O(n)。 來看,這裏的執行效率顯然不好。

好了,今天記錄下來,以後不會再忘記了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章