一、基本思想
- 通過對待排序序列從後向前(從下標較大的元素開始),依次比較相鄰元素的排序碼,若發現逆序則交換,使排序碼較小的元素逐漸從後部移向前部(從下標較大的單元移向下標較小的單元),就象水底下的氣泡一樣逐漸向上冒。
二、核心步驟
- 將第1和第2個兩個關鍵字進行比較,若前者大於後者r[1].key>r[2].key,則交換,然後比較第2個記錄與第3個記錄,依次類推,直至第n-1個記錄和第n個記錄比較爲止,以上爲第一趟冒泡排序。
三、需要終止標記
- 因爲排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序,因此要在排序過程中設置一個標誌flag判斷元素是否進行過交換。從而減少不必要的比較。
四、示例
五、完整代碼
//演示冒泡排序法
public class Demo132 {
public static void main(String[] args) {
int arr[]={1,6,0,-1,9,-100,90};
int temp=0;
//排序
//外層循環,可以決定一共走趟
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]){
//換位
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
//輸出最後結果
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}
六、時間複雜度 T(n)=O(n²)
-
最好情況(正序)
比較次數:n-1
移動次數:0 -
最壞情況(逆序)
比較次數:
移動次數: