冒泡排序
冒泡排序的基本思想是:通過對待排序序列從前向後(從下標最小的元素開始),依次比較相鄰元素的值,若發現逆序則交換(即如果左邊元素大於右邊則交換位置),目的是使較大的元素從前向後移動
注意:
依次比較每經過一次循環,當前循環內的最大的元素將被移動到最後,那麼循環的條件就需要注意了,接下來上代碼
分析冒泡排序:
假如原始數組爲 3,9,-1,10,20
接下來只列出方法
//arr:傳入的需要排序的數組
public static void bubbleSort(int [] arr){
int temp = 0; //臨時變量,用於交換數據
boolean flag = false;//標誌位用於優化冒泡排序
//外層循環控制循環次數,內層控制元素之間值大小的比較
for(int i = 0; i < arr.length - 1; i++){
//這裏就是上面所說的需要注意的點,因爲每經歷過一次循環,當前最大的值就移動到最後了
//因此需要減去外層的循環次數
for(int j = 0; j < arr.length - 1 - i;j++){
if(arr[j] > arr[j+1]){
flag = true;//判斷是否有過值的交換
temp = arr[j];
arr[j] = arr[j+1];
arr[j] = temp;
}
if(!flag){//如果flag爲false,則說明沒有進行過值的交換,證明當前已經是排列好順序的序列
break;
}else{
flag = false;//否則重新置爲false,供下次使用
}
}
}
}
通過上面的例子可以看出,其實如果恰巧正好是排列好的時候,則用上面的方法就減少了沒有必要的步驟(算是一個小的優化)