冒泡排序

一、基本思想

  • 通過對待排序序列從後向前(從下標較大的元素開始),依次比較相鄰元素的排序碼,若發現逆序則交換,使排序碼較小的元素逐漸從後部移向前部(從下標較大的單元移向下標較小的單元),就象水底下的氣泡一樣逐漸向上冒。

二、核心步驟

  • 將第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²)

  1. 最好情況(正序)
    比較次數:n-1
    移動次數:0

  2. 最壞情況(逆序)
    比較次數:在這裏插入圖片描述
    移動次數:在這裏插入圖片描述

七、空間複雜度 S(n)=O(1)

發佈了51 篇原創文章 · 獲贊 20 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章