java中的排序的方法------冒泡排序

冒泡排序的思路:

        比較相鄰的兩個數,如果順序和指定的順序相反那麼就交換位子,每比較完一趟需要比較的個數-1:

       eg:

         

比較的趟數最多爲n-1趟,最少爲一趟(即數組的順序和默認要求的排列順序一致)。

下面我們來根據冒牌排序的趟數來分析代碼:

    1)、每趟的比較次數都大於1次

@Test
	public void bubble(){
		int a[]={12,34,23,21,43,12,34,45,65};
		for(int i=0;i<a.length-1;i++){//比較的趟數
			for(int j=j;j<a.length-i-1;j++){
				if(a[j]>a[j+1]){
					swap(a,j,j+1);
				}
			}
		}
		print(a);//自己寫的輸出數組的函數
	}

其中swap是一個交換引用的函數,關於值的交換值得注意的是:基本數據類型的交換是值的交換,而數組需要的是引用的交換。不可以採用基本數據類型的值交換方式來交換數組的值。

public void swap(int a[], int i, int j) {
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
2)、優化:假設存在有一行的比較次數爲0,那麼就等價於這一趟之前已經完成排序,即可退出排序循環。

   用一個boolean值來進行判斷,如果沒有進行交換就退出循環。

public void bubbleSort2(int a[]) {
		for (int i = 0; i < a.length; i++) {
			boolean boo = true;
			for (int j = 0; j < a.length - i - 1; j++) {
				if (a[j] > a[j + 1]) {
					swap(a, j, j + 1);
					boo = false;
				}
			}
			if (boo)
				break;
		}
		print(a);}


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