交換排序 氣泡排序

2021-06-22 10:53:07 字數 1646 閱讀 5165

交換排序:兩兩比較待排序記錄的關鍵碼,若是逆序,則交換,直到無逆序。其中最簡單的交換排序是:氣泡排序。

氣泡排序(bubble sort,也叫起泡排序):不斷地比較相鄰的記錄,若是不滿足排序要求,則交換。

交換時,可從前向後,也可從後向前。看乙個從前向後的排序過程:

原序列 12  3   45  33  6

下標   0   1   2   3   4

第一趟:

3   12  45  33  6  (3,12交換)

3   12  45  33  6  (12,45不用交換)

3   12  33  45  6  (45,33交換)

3   12  33  6   45 (45,6交換)

第二趟:

3   12  33  6  45  (3,12不用交換)

3   12  33  6  45  (12,33不用交換)

3   12  6   33 45  (33,6交換)

第三趟:

3   12  6   33 45  (3,12不用交換)

3   6   12  33 45  (12,6交換)

第四趟:

3   6   12  33 45  (3,6不用交換)

結束。以上過程非常之詳盡,相信你一定懂了。

**一:

void bubblesort10(int a, int n)  //從左向右  	}

}void bubblesort11(int a, int n) //從右向左

}}

繼續思考:若是在某一趟排序中,無元素交換,是不是表明已全部有序了呢?

是的!既然如此,下一趟排序就不用進行了。

針對**一,給出優化的**二:

void bubblesort20(int a, int n)  //從左向右 

j--;

} }}void bubblesort21(int a, int n) //從右向左

j++;

} }}

再思考:下一趟排序向右(或向左)的最遠位置,只是簡單的減一嗎?可否更高效?

針對**二,給出優化的**三:

void bubblesort30(int a, int n)  //從左向右 

}if (k == 0)

break;

j = k;

} }

}void bubblesort31(int a, int n) //從右向左

}if (k == n - 1)

break;

j = k;

} }

}

交換方法的**是這樣:

void swap(int &a, int &b)

}

測試走起……

小結:

氣泡排序是穩定的,但不高效。時間複雜度是o(n^2)。

若是有所幫助,頂乙個哦!

專欄目錄看這裡:

氣泡排序 交換排序

最壞情況下,直接插入排序時間複雜度為 n 最小時間代價為 n 平均時間代價為 n 附加儲存空間 乙個儲存單位 穩定性 穩定 原址性 是 緊緻性 乙個比較,三個賦值操作 特點 對於基本有序,或偶爾有幾個在有序位置附近時,效率高,只有直接插入排序和它達到一樣的效果 整體效果不如直接插入排序,因為,直接插...

交換排序 氣泡排序

1.原理 從小到大排序 存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂 下標為0 然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。在 氣泡排序中,最重要的思想是兩兩比較,將兩者較少的公升上去 氣泡排序最壞情況的時間複雜度是o n 2...

交換排序 氣泡排序

交換排序,通過相鄰資料的交換來達到排序的目的 對陣列中的各資料,一次比較相鄰的兩個元素的大小。如果前面的資料大於後面的資料,就交換這兩個資料,經過第一輪的多次比較排序後,便可把最小的資料排好 再用同樣的方法把剩下的資料逐個進行比較,最後便可按照從小到大的順序排好陣列各資料的順序。初始資料 118 1...